R:如果X小于值,则聚合在行上,否则不聚合

时间:2016-03-01 21:30:10

标签: r aggregate

我正在尝试根据特定列聚合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行,所以我宁愿不确定哪些行应该手动平均。

1 个答案:

答案 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)]

另外,我确信有一种比我做的更简单的方法。应该有一个简单的一行代码,但我不知道。