使用列值在新数据框中子集数据框

subset data frame in new data frame using column values

我正在尝试在不同的 data.frame 中自动对大 data.frame 进行子集化。我有类似的东西:

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    

...

达到那个目标的最快方法是什么?谢谢!!

您可以使用 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.


正如 Frank 在评论中指出的那样,可能没有必要像这样拆分(尽管我们不能在没有更多信息的情况下肯定地说)。使用 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