我正在尝试自动在不同的data.frames中对大数据框进行子集化。我有类似的东西:
Type1 Type2 Type3 Info1 Info2 Info3
A 1 Z a a a
A 2 Y b b b
B 4 X c c c
A 1 Z d d d
我想为每个Type3> Type2> Type1
创建不同的数据框第一个数据框(A1Z):
Type1 Type2 Type3 Info1 Info2 Info3
A 1 Z a a a
A 1 Z d d d
第二个数据框(A2Y):
Type1 Type2 Type3 Info1 Info2 Info3
A 2 Y b b b
...
达到这个目标的最快方法是什么?谢谢!!
答案 0 :(得分:4)
您可以使用split
生成data.frames列表:
> split(df, do.call(paste0, df[,1:3]))
$A1Z
Type1 Type2 Type3 Info1 Info2 Info3
1 A 1 Z a a a
4 A 1 Z d d d
$A2Y
Type1 Type2 Type3 Info1 Info2 Info3
2 A 2 Y b b b
$B4X
Type1 Type2 Type3 Info1 Info2 Info3
3 B 4 X c c c
通常建议将相关数据结构(如data.frames)保存在单个对象中(在本例中为列表)。如果要将这些data.frames分配给全局环境,可以调查?list2env
。
正如弗兰克在评论中指出的那样,这样的分裂可能没有必要(尽管如果没有更多信息我们就不能肯定地说)。使用dplyr,您可以使用group_by
按这些TypeX列对数据进行分组,然后对每个组执行一些操作。你可以这样开始:
library(dplyr)
df %>%
group_by(Type1, Type2, Type3) %>%
# ... more manipulations...
#Source: local data frame [4 x 6]
#Groups: Type1, Type2, Type3
#
# Type1 Type2 Type3 Info1 Info2 Info3
#1 A 1 Z a a a
#2 A 2 Y b b b
#3 B 4 X c c c
#4 A 1 Z d d d