Groupby 或在 big df 上聚合
Groupby or aggregate on big df
我不明白如何在 R 中对大 df 进行分组。
第 0-12 列是标识符,唯一的,我想保持原样
我试过很多变体
aggregate(cbind(names(preferences[-c(0, 12)])) ~
cbind(names(preferences[c(0, 12)])), data=preferences, FUN=sum)
我得到
Error in model.frame.default(formula = cbind(names(preferences[-c(0, 12)])) ~ :
variable lengths differ (found for 'cbind(names(preferences[c(0, 12)]))')
a b c d e
1 f(1) 11 2 15
1 f(1) 12 2 15
2 f(2) 13 4 3
2 f(2) 14 6 4
3 f(3) 15 5 6
a b c d e
1 f(1) 23 4 30
2 f(2) 27 10 7
3 f(3) 15 5 6
Python相当于df[11:624].groupby(by=col11)
df 是 48GB,所以速度很重要(python 由于内存不足 (250GB) 而崩溃)
收到 I went and looked at some benchmarks 之后,这真是太快了!!!!
library(data.table)
setDT(df)
x <- names(df)[13:ncol(df)]
y <- names(df)[1:12]
df_2 <- df[, lapply(.SD, \(i) sum(i)), .SDcols=x, by=y]
不过要注意 R 与 Python 中的索引。 R 从 1 开始计数(而 Python 的索引为零)
我不明白如何在 R 中对大 df 进行分组。
第 0-12 列是标识符,唯一的,我想保持原样
我试过很多变体
aggregate(cbind(names(preferences[-c(0, 12)])) ~
cbind(names(preferences[c(0, 12)])), data=preferences, FUN=sum)
我得到
Error in model.frame.default(formula = cbind(names(preferences[-c(0, 12)])) ~ :
variable lengths differ (found for 'cbind(names(preferences[c(0, 12)]))')
a b c d e
1 f(1) 11 2 15
1 f(1) 12 2 15
2 f(2) 13 4 3
2 f(2) 14 6 4
3 f(3) 15 5 6
a b c d e
1 f(1) 23 4 30
2 f(2) 27 10 7
3 f(3) 15 5 6
Python相当于df[11:624].groupby(by=col11)
df 是 48GB,所以速度很重要(python 由于内存不足 (250GB) 而崩溃)
收到
library(data.table)
setDT(df)
x <- names(df)[13:ncol(df)]
y <- names(df)[1:12]
df_2 <- df[, lapply(.SD, \(i) sum(i)), .SDcols=x, by=y]
不过要注意 R 与 Python 中的索引。 R 从 1 开始计数(而 Python 的索引为零)