我有一个大型数据集(大约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()但是对我来说都没有用。
非常感谢任何建议。谢谢!
答案 0 :(得分:3)
对于平均值,您可能想尝试将数据放入data.table
然后应用函数:
mydata <- data.table(mydata)
mydata[, lapply(.SD, mean), .SDcols = c("cmass", "gmass"), by = "crab"]
假设您想获得cmass
和gmass
的平均值。
对于你问题的其他部分,我不太确定。您可以尝试仅在您感兴趣的列上设置密钥,然后调用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)