我的数据框有以下几列:
df1 <- data.frame(A = c(1,2,4), B=c(1,3,1), C=c(1,1,3))
我有两个条件来获得A列的平均值。
我知道我可以使用过滤器来剪切数据帧,使列B = 1。但是,当我希望将B列视为1和3范围内的范围时,我不确定该怎么做。
有没有更明智的方法来获取列的平均值而不先将数据帧切割成较小的尺寸?
答案 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])