在R中使用paste、by和data.table进行数据操作

7

我正在尝试从重塑的数据集中粘贴字符串。 我正在使用如下的data.table包:

m<-data.frame(x=rep(c("a","b"),20),y=factor(sample(letters,40,replace=T)))
DT<-data.table(m)
setkey(DT,x)
DT[,paste(y,sep=","),by=x]

然而,这只会给出一个新的框架,与原始框架除了变量名称不同之外几乎完全相同。我希望输出是两个连接在一起的向量,其中变量被粘贴在一起。我该如何做到这一点?


4
尝试使用collapse代替sep - joran
那真是太棒了——我的错... - Misha
7
玩笑话,你也可以使用 as.list 而不是 paste。这将创建一个列为列表的列,其中每个单元格本身就是向量。有时,这比创建许多潜在的长字符串更好,因为后者可能需要稍后再次进行 strsplit。只是另一种选择。 - Matt Dowle
2个回答

10

为了完整起见,这是官方答案:

如果你使用 paste(y,collapse=",") ,它应该可以正常工作。


0

toString(y) 函数产生的结果与 paste(y, collapse = ", ") 相同,我将其用作较长的 paste 版本的替代品。因此

DT[, toString(y), by = x]

会产生以下结果

#   x                                                         V1
#1: a v, o, q, p, t, c, y, d, n, r, o, k, v, r, t, n, e, f, g, u
#2: b y, j, t, l, w, r, s, w, b, x, h, j, o, k, a, c, r, c, b, e

这对于粘贴操作也是一样的

DT[, paste(y, collapse = ", "), by = x]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接