получить средний столбец A на основе диапазона значений в столбце B

Мой фрейм данных имеет несколько столбцов следующим образом:

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

У меня есть два условия для получения средних значений для столбца A.

  • Условие 1: я хочу получить среднее значение столбца A, когда B равно 1, т.е. будут усреднены только row1 и row2.
  • Условие 2: я хочу получить среднее значение столбца B, когда значения столбца A больше 1, но меньше 3, т.е. будет рассматриваться только строка 2.

Я знаю, что могу использовать фильтр, чтобы обрезать фрейм данных, чтобы иметь только столбец B = 1. Однако я не уверен, как это сделать, когда я хочу, чтобы столбец B рассматривался как диапазон от 1 до 3.

Есть ли более разумные способы получить средние значения столбца без предварительного сокращения фрейма данных на меньший размер?


person a83    schedule 26.05.2011    source источник
comment
При условии 1: B == 1 в строках 1 и 3, а не 1 и 2. Это опечатка?   -  person Chase    schedule 26.05.2011
comment
см. также ?cut и ?tapply или ?aggregate или...   -  person Joris Meys    schedule 26.05.2011


Ответы (2)


Вы можете сделать свое подмножество в том же вызове mean следующим образом:

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

with(df1, mean(B[A > 1 & A < 3]))
person Chase    schedule 26.05.2011

Вы можете комбинировать два логических теста с помощью &. Таким образом, вы можете объединить тест B > 1 с B < 3:

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

# Condition B:
mean(df1$B[df1$A>1 & df1$A<3])
person Sacha Epskamp    schedule 26.05.2011