【问题标题】:R: How to subset dataframe by group?R:如何按组对数据帧进行子集化?
【发布时间】:2016-03-06 02:45:33
【问题描述】:

我有以下名为groceries 的数据框:

Region    Item    Barcode    Version
East     Cereal    BM        2.1
North    Bagel     EP        2.0
East     Pizza     BM        2.3
West     Taco      EP        2.2
West     Apple     BM        3.0
South    Orange    EP        3.2
North    Tomato    EP        2.2
South    Grape     EP        2.0
East     Pineapple EP        3.2
North    Cake      BM        2.0

如何通过 Barcode-Version 对数据帧进行子集化以获得以下数据帧?

数据框

Region    Item    Barcode    Version
East     Cereal    BM        2.1
East     Pizza     BM        2.3
North    Cake      BM        2.0

数据框

Region    Item    Barcode    Version
West     Apple     BM        3.0

数据框

Region    Item    Barcode    Version
North    Bagel     EP        2.0
North    Tomato    EP        2.2
South    Grape     EP        2.0
West     Taco      EP        2.2

数据框

Region    Item    Barcode    Version
South    Orange    EP        3.2
East     Pineapple EP        3.2

如您所见,我正在尝试按条形码和版本(作为整数;因此 2.0、2.1、2.3 都被视为 2 等)对原始数据帧进行子集化。

这是我目前所拥有的:

subset(groceries, Barcode=="BM" & Version==2.0 | Version==2.1 | Version==2.3)

您可以想象,这并不理想。有没有办法获得BarcodeVersion 的不同因子的向量(作为整数)?如果我可以将这两个作为向量,那么我可能可以创建一个 for 循环,自动执行上面的行来创建这 4 个数据帧。

【问题讨论】:

    标签: r dataframe subset


    【解决方案1】:
    split(df, interaction(df$Barcode, floor(df$Version)))
    # $BM.2
    # Region   Item Barcode Version
    # 1    East Cereal      BM     2.1
    # 3    East  Pizza      BM     2.3
    # 10  North   Cake      BM     2.0
    # 
    # $EP.2
    # Region   Item Barcode Version
    # 2  North  Bagel      EP     2.0
    # 4   West   Taco      EP     2.2
    # 7  North Tomato      EP     2.2
    # 8  South  Grape      EP     2.0
    # 
    # $BM.3
    # Region  Item Barcode Version
    # 5   West Apple      BM       3
    # 
    # $EP.3
    # Region      Item Barcode Version
    # 6  South    Orange      EP     3.2
    # 9   East Pineapple      EP     3.2
    

    【讨论】:

    • 谢谢!这正是我想要的。如何自动将不同的数据框分配给单独的变量?真实数据有很多这样的内部子集。我如何将它们拉出来而不必做:例如split(df, interaction(df$Barcode, floor(df$Version)))$EP.3
    • @cooldood3490,这样做不是一个好主意,尤其是有很多子集;使用列表更实用。您想如何称呼这些数据框?也许运行aux <- interaction(df$Barcode, floor(df$Version)); ml <- split(df, aux) 然后使用ml[[aux[1]]]ml[[aux[2]]] 也可以?或者当然是ml[[1]]ml[[2]]
    猜你喜欢
    • 1970-01-01
    • 2014-11-13
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 2015-06-20
    • 2016-02-15
    相关资源
    最近更新 更多