如何将汇总函数应用于数据表的多个列

时间:2014-10-16 20:57:41

标签: r data.table

首先,让我们伪造一些数据

>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

它只将函数应用于我指定的两列中的第一列。

2 个答案:

答案 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