我有一个非常简单的数据框架: X Y --- A 1 A 2 B 3 C 1 C 3 我的最终结果应该是这样的列表: $`A`[1] 1 2$`B`[1] 3$`C`[1] 1 3 对于此操作,我在R中使用split()函数: k - split(Y, X) 这工作得很好.但是,如
X Y --- A 1 A 2 B 3 C 1 C 3
我的最终结果应该是这样的列表:
$`A` [1] 1 2 $`B` [1] 3 $`C` [1] 1 3
对于此操作,我在R中使用split()函数:
k <- split(Y, X)
这工作得很好.但是,如果我想在包含2200万行的数据帧上应用此代码,包括1000万个X组和387000个Y值,那么它真的很耗时.
我尝试使用RRO 8.0开放版本来支持MKL.但是,仍然只使用一个内核. CPU有64 GB的RAM,所以不应该是一个问题.
有什么想法可以更聪明地计算出来吗?
尝试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
或者使用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
数据
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))