首先,让我们伪造一些数据
>library(data.table)
>DT = data.table(x=c('A','A','B','B'),y=c('X','Y','X','Y'),z=c(1,2,3,4))
>DT
x y z
1: A X 1
2: A Y 2
3: B X 3
4: B Y 4
>DF<-data.frame(DT)
>DF
x y z
1 A X 1
2 A Y 2
3 B X 3
4 B Y 4
cols<-cbind('x','y')
> DF[,cols]
x y
1 A X
2 A Y
3 B X
4 B Y
> lapply(X=DF[,cols],FUN=paste,sep=', ',collapse=', ')
$x
[1] "A, A, B, B"
$y
[1] "X, Y, X, Y"
这感觉它应该非常简单。我该怎么做才适用于DT?我试图坚持使用data.frame,以便我可以在非常大的数据集(n> 1 mil)上运行它。我最接近的是:
> DT[,lapply(X=list(get(cols)),FUN=paste,sep=', ',collapse=', ')]
V1
1: A, A, B, B
它只将函数应用于我指定的两列中的第一列。
答案 0 :(得分:2)
as.list(DT[, lapply(.SD, paste, collapse = ","), .SDcols = c('x','y')])
#$x
#[1] "A,A,B,B"
#
#$y
#[1] "X,Y,X,Y"
答案 1 :(得分:2)
试试这个:
DT[, lapply(.SD, toString), .SDcols = c("x", "y")]
x y
## 1: A, A, B, B X, Y, X, Y