我想按因子变量之一的级别拆分现有数据帧,以便拆分数据帧的名称对应于因子的级别。
df <- data.frame(cbind(X = 1:10, Y = rnorm(10)), Z = sample(LETTERS[1:3], 10, replace = TRUE))
如
df
是原始数据帧,我想将其拆分为三个名为 A
的数据帧, B
和 C
,使得:A = subset(df, Z == 'A')
B = subset(df, Z == 'B')
...
有没有一种简单的方法可以一次性做到这一点?我有一个庞大的数据集,并且因子变量的级别太多。
最佳答案
在基础 R 中,您应该使用函数 split
.和 split
有一个 default
方法和方法之一 data.frame
.但是,我发现 split.data.frame
随着要拆分的级别数量变得巨大,速度非常慢。那是,
# inefficient in my opinion
split(df, df$Z)
上述解决方案也将直接为您提供您要求的名称,但会在很大程度上窒息。
如果您愿意使用外部包进行交易以提高速度/效率,我建议您使用
data.table
包裹:require(data.table)
dt <- data.table(df)
oo <- dt[, list(list(.SD)), by = Z]$V1
names(oo) <- unique(dt$Z)
关于r - 按因子级别拆分数据帧并按这些级别命名数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17695443/