提高R中split()函数的性能?

Dan*_*ltz 3 statistics split r rro

我有一个非常简单的数据框架:

    X Y
    ---
    A 1
    A 2
    B 3
    C 1
    C 3
Run Code Online (Sandbox Code Playgroud)

我的最终结果应该是这样的列表:

$`A`
[1] 1 2

$`B`
[1] 3

$`C`
[1] 1 3
Run Code Online (Sandbox Code Playgroud)

对于此操作,我在R中使用split()函数:

k <- split(Y, X)
Run Code Online (Sandbox Code Playgroud)

这工作得很好.但是,如果我想在包含2200万行的数据帧上应用此代码,包括1000万个X组和387000个Y值,那么它真的很耗时.我尝试使用RRO 8.0开放版本来支持MKL.但是,仍然只使用一个内核.CPU有64 GB的RAM,所以不应该是一个问题.

有什么想法可以更聪明地计算出来吗?

akr*_*run 5

尝试

 library(data.table)
 DT <- as.data.table(df)
 DT1 <- DT[, list(Y=list(Y)), by=X]
 DT1$Y
 #[[1]]
 #[1] 1 2

 #[[2]]
 #[1] 3

 #[[3]]
 #[1] 1 3
Run Code Online (Sandbox Code Playgroud)

或使用 dplyr

 library(dplyr)
 df1 <-  df %>% 
             group_by(X) %>%
              do(Y=c(.$Y))

 df1$Y
 #[[1]]
 #[1] 1 2

 #[[2]]
 #[1] 3

 #[[3]]
 #[1] 1 3
Run Code Online (Sandbox Code Playgroud)

数据

 df <- structure(list(X = c("A", "A", "B", "C", "C"), Y = c(1L, 2L, 
 3L, 1L, 3L)), .Names = c("X", "Y"), class = "data.frame", row.names = c(NA, 
 -5L))
Run Code Online (Sandbox Code Playgroud)