基于列B的一系列数值,获取列A的平均值

8

我的数据框有以下几列:

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

我有两个条件来获取列A的平均值。
条件1:当B为1时,我想要获取列A的平均值,即只有第一行和第二行将被平均。
条件2:当列A的值大于1但小于3时,我想要获取列B的平均值,即仅考虑第二行。
我知道可以使用过滤器将数据框裁剪为仅具有B = 1的列。但是,当我希望将列B视为1和3之间的范围时,我不确定如何做到这一点。
有没有更聪明的方法来获取列的平均值,而无需首先将数据框裁剪为较小的大小?

在条件1中:在第1行和第3行中,B == 1,而不是在第1行和第2行中。这是一个打字错误吗? - Chase
2
请参阅?cut?tapply?aggregate等相关内容。 - Joris Meys
2个回答

8
您可以在调用mean时进行子集操作,如下所示:
with(df1, mean(A[B == 1]))

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

2

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接