我正在尝试根据特定列聚合R中的一些数据。 示例数据如下。
> d <- data.frame(POS=c(1,2,2,2,3,4,4,5), Dist=c(111,6,9,58,250,4,65,111),Read=c(1,2,6,6,25,1,8,11))
> print(d)
POS Dist Read
1 1 111 1
2 2 6 2
3 2 9 6
4 2 58 6
5 3 250 25
6 4 4 1
7 4 65 8
8 5 111 11
我想要做的是,如果距离列小于100,则仅根据列读取计算跨行的平均值。因此,在POS列下,我希望第1行保留为第1组,然后计算第2,3行和第2行的平均值。如图4所示,第5行单独作为第3组,然后计算第6行的平均值。第4组的7(平均值= 4.5)。
“真实”数据集没有POS列,并且长度> 24,000行,所以我宁愿不确定哪些行应该手动平均。
答案 0 :(得分:1)
好的,这应该做到。
df表示数据框,或存储数据的对象。
library(dplyr)
summary_dataset <- d %>% filter(Dist < 100) %>% group_by(POS) %>% summarize(Mean = mean(Read))
要将这些汇总值绑定到数据集上,只需使用它。
d$Mean <- summary_dataset$Mean[match(d$POS, summary_dataset$POS)]
另外,我确信有一种比我做的更简单的方法。应该有一个简单的一行代码,但我不知道。