Reputation: 81
My dataframe has several columns as follows:
df1 <- data.frame(A = c(1,2,4), B=c(1,3,1), C=c(1,1,3))
I have two conditions to get average values for column A.
I know I can use filter to cut the dataframe to have column B = 1 only. However, I am unsure how to do it when I want the column B to be considered as a range within 1 and 3.
Are there any smarter ways to get the average values of column without cutting the dataframe into a smaller size first?
Upvotes: 8
Views: 20869
Reputation: 69151
You can do your subsetting in the same call to mean
like so:
with(df1, mean(A[B == 1]))
with(df1, mean(B[A > 1 & A < 3]))
Upvotes: 8
Reputation: 47541
You can combine two logical tests with &
. So you could combine the B > 1
test with B < 3
:
# Condition A:
mean(df1$A[df1$B==1])
# Condition B:
mean(df1$B[df1$A>1 & df1$A<3])
Upvotes: 2