按因子级别拆分数据框,并按这些级别命名数据框

use*_*432 4 r

我想将现有数据帧除以其中一个因子变量的级别,以便拆分数据帧的名称对应于因子的级别.

df <- data.frame(cbind(X = 1:10, Y = rnorm(10)), Z = sample(LETTERS[1:3], 10, replace = TRUE))
Run Code Online (Sandbox Code Playgroud)

如果df是原始数据帧,我想将其拆分为三个称为的数据帧A,B并且C:

A = subset(df, Z == 'A')
B = subset(df, Z == 'B')
...
Run Code Online (Sandbox Code Playgroud)

有一种简单的方法可以一次性完成这项工作吗?我有一个庞大的数据集,因子变量有太多的水平.

Aru*_*run 7

在基数R中,您应该使用该函数split.并split有一个default方法和一个data.frame.但是,我发现这split.data.frame很慢,因为分裂的级别变得很大.那是,

# inefficient in my opinion
split(df, df$Z)
Run Code Online (Sandbox Code Playgroud)

上面的解决方案将直接为您提供您要求的名称,但会在很大程度上阻塞.

如果您愿意使用外部包进行交易以提高速度/效率,我建议使用data.table包:

require(data.table)
dt <- data.table(df)
oo <- dt[, list(list(.SD)), by = Z]$V1
names(oo) <- unique(dt$Z)
Run Code Online (Sandbox Code Playgroud)

  • 注意第二种解决方案的解释?第3行和第4行(但大多数是3行)看起来像R新手(我)的黑暗魔法. (2认同)

Ram*_*ath 5

你可以用这个plyr包来做

require(plyr)
dlply(df, .(Z))
Run Code Online (Sandbox Code Playgroud)