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

时间:2015-04-25 15:33:43

标签: r unique large-data

我有一个大型数据集(大约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()但是对我来说都没有用。

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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)