我想按因子变量之一的级别拆分现有数据帧,以便拆分数据帧的名称与因子的级别相对应。
df <- data.frame(cbind(X = 1:10, Y = rnorm(10)), Z = sample(LETTERS[1:3], 10, replace = TRUE))
If df
是原始数据帧,我想将其分成三个数据帧,称为A
, B
and C
,这样:
A = subset(df, Z == 'A')
B = subset(df, Z == 'B')
...
有没有一种简单的方法可以一次性完成此操作?我有一个巨大的数据集,因子变量的级别太多。
在基本 R 中,您应该使用该函数split
. And split
has a 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)