【问题标题】:Selecting specific rows from a large dataset using column values使用列值从大型数据集中选择特定行
【发布时间】:2015-07-04 05:15:29
【问题描述】:

我有一个大型数据集(大约 2000 行和 38 列),看起来像这样(某些列中缺少数据):

     species crab cmass  gill gmass     treatment    months avglw  avgils
222      Cm   65 34.273    p 0.198     Newtons Cove      0 68.108  93.181
223      Cm   57 33.506    p 0.166     Newtons Cove      0 37.908  39.683
225      Cm   65 34.273    p 0.198     Newtons Cove      0 68.108  93.181
231      Cm   62 30.852    p 0.147     Newtons Cove      0 37.285  89.823
239      Cm   65 34.273    p 0.198     Newtons Cove      0 68.108  93.181
240      Cm   57 33.506    p 0.166     Newtons Cove      0 37.908  39.683
241      Cm   62 30.852    p 0.147     Newtons Cove      0 37.285  89.823
242      Cm   63 22.456    p 0.093     Newtons Cove      0 70.005  67.687
243      Cm   59 22.422    p 0.113     Newtons Cove      0 21.834  39.481

每个螃蟹编号有多行,我希望能够对每个螃蟹编号的行进行平均,或者为每个螃蟹编号选择第一个唯一行,然后排除后续行。

例如:我想平均第 222、225、239 行,因为它们都来自螃蟹“65”; 或:我想选择第 222 行,然后排除 225 和 239,因为它们来自已选择的螃蟹。

我尝试过使用 unique() 和 sqldf(),但都没有为我工作。

非常感谢任何建议。谢谢!

【问题讨论】:

    标签: r unique large-data


    【解决方案1】:

    平均而言,您可能希望尝试将数据放入 data.table,然后应用函数:

    mydata <- data.table(mydata)
    mydata[, lapply(.SD, mean), .SDcols = c("cmass", "gmass"), by = "crab"] 
    

    假设您想获得cmassgmass 的平均值。

    对于您问题的另一部分,我不太确定。您可以尝试只在您感兴趣的列上设置一个键,然后调用unique

    setkey(mydata, crab)
    unique(mydata)
    

    然后它将按crab 排序,unique 将删除具有重复值crab 的行。这就是你想要的吗?

    【讨论】:

    • @akrun 我编辑了问题以反映 OP 想要什么。对于crab 列中的每个值,将给出.SDcols = c(...) 中指定的任何列的平均值
    • 是的,谢谢,我已经看到了,OP 的描述对于需要平均哪些列有点太含糊了..
    【解决方案2】:

    目前还不清楚预期的输出是什么

    library(dplyr)
    df1 %>% 
       group_by(species, crab, treatment, gill, months) %>%
       summarise_each(funs(mean=mean(., na.rm=TRUE)))
    

    也许是

     df1 %>% 
         group_by(crab) %>% 
         slice(1)
    

    【讨论】:

      猜你喜欢
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多