2014-10-16 46 views
1

第一關的多列,讓我們假一些數據如何申請彙總函數到數據表

>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 

它只是將函數應用到我指定的兩列中的第一列。

+1

可能重複(http://stackoverflow.com/questions/16659887/efficiently-run -a-function-on-many-columns-in-a-data-table-in-r) – hrbrmstr 2014-10-16 21:03:41

+0

只需稍作說明,你可以使用setDT(轉換爲DT)和setDF(轉換爲DF)在data.table包中。 – KFB 2014-10-16 21:27:18

回答

2
as.list(DT[, lapply(.SD, paste, collapse = ","), .SDcols = c('x','y')]) 
#$x 
#[1] "A,A,B,B" 
# 
#$y 
#[1] "X,Y,X,Y" 
2

嘗試這種情況:

DT[, lapply(.SD, toString), .SDcols = c("x", "y")] 
      x   y 
## 1: A, A, B, B X, Y, X, Y 
的[有效地中的R的數據表上運行許多列的功能]