【问题标题】:subset data frame in new data frame using column values使用列值在新数据框中子集数据框
【发布时间】:2015-03-14 03:07:42
【问题描述】:

我正在尝试自动在不同的 data.frames 中对大 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    

...

实现这一目标的最快方法是什么?谢谢!!

【问题讨论】:

  • 我认为没有必要以这种方式拆分,除非您要将它们保存到单独的文件中。

标签: r dplyr reshape


【解决方案1】:

您可以使用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 在 cmets 中指出的那样,这样的拆分可能没有必要(尽管没有更多信息我们不能肯定地说)。使用 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

【讨论】:

    猜你喜欢
    • 2017-07-31
    • 2021-09-15
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多