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

a83*_*a83 6 average r

我的数据框有以下几列:

df1 <- data.frame(A = c(1,2,4), B=c(1,3,1), C=c(1,1,3))
Run Code Online (Sandbox Code Playgroud)

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

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

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

是否有更智能的方法来获取列的平均值而不将数据帧首先缩小为更小的尺寸?

Cha*_*ase 7

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

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

with(df1, mean(B[A > 1 & A < 3]))
Run Code Online (Sandbox Code Playgroud)


Sac*_*amp 2

您可以将两个逻辑测试结合起来&。所以你可以将B > 1测试与B < 3

# Condition A:
mean(df1$A[df1$B==1])

# Condition B:
mean(df1$B[df1$A>1 & df1$A<3])
Run Code Online (Sandbox Code Playgroud)