使用列值从大型数据集中选择特定行

Selecting specific rows from a large dataset using column values

我有一个大数据集(大约 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

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

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

我尝试过使用 unique() 和 sqldf(),但它们都不适合我。

如有任何建议,我们将不胜感激。谢谢!

对于平均值,您可能想尝试将数据放入 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 的行。那是你想要的吗?

不清楚预期的输出是什么

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

或者可能是

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