根据B列中的值范围获取平均列A.

时间:2011-05-26 11:54:16

标签: r average

我的数据框有以下几列:

df1 <- data.frame(A = c(1,2,4), B=c(1,3,1), C=c(1,1,3))

我有两个条件来获得A列的平均值。

  • 条件1:当B为1时,我希望获得A列的平均值,即只对row1和row2进行平均。
  • 条件2:当列A的值大于1但小于3时,我希望得到列B的平均值,即只考虑第2行。

我知道我可以使用过滤器来剪切数据帧,使列B = 1。但是,当我希望将B列视为1和3范围内的范围时,我不确定该怎么做。

有没有更明智的方法来获取列的平均值而不先将数据帧切割成较小的尺寸?

2 个答案:

答案 0 :(得分:7)

您可以在同一个mean调用中进行子集化,如下所示:

with(df1, mean(A[B == 1]))

with(df1, mean(B[A > 1 & A < 3]))

答案 1 :(得分:2)

您可以将两个逻辑测试与&结合使用。因此,您可以将B > 1测试与B < 3

结合使用
# Condition A:
mean(df1$A[df1$B==1])

# Condition B:
mean(df1$B[df1$A>1 & df1$A<3])