Оператор условного среднего значения во фрейме данных

#r #conditional-statements #lapply #mean #sapply

#r #условные операторы #lapply #среднее #sapply

Вопрос:

Следующий код вернет среднее значение при условии, что месяцы больше 6.

 mean(df[df$delta1>6, "delta1"], na.rm=T)
 

Теперь, как мне применить это для каждого столбца в фрейме данных?

df:

 delta1      delta2      delta3
NA          2           3
4           NA          6
7           8           NA
10          NA          12
NA          14          15
16          NA          18
19          20          NA
 

Ответ №1:

Здесь полезно семейство функций apply:

 sapply(df, function(x) mean(x[x>6], na.rm=T))
 

Ответ №2:

Мы можем установить значения в фрейме данных, которые меньше, чем равны 6 NA , и подсчитать среднее значение colMeans , игнорируя NA значения.

 df[df <= 6] <- NA
colMeans(df, na.rm = TRUE)

#delta1 delta2 delta3 
#    13     14     15 
 

Данные

 df <- structure(list(delta1 = c(NA, 4L, 7L, 10L, NA, 16L, 19L), delta2 = c(2L, 
NA, 8L, NA, 14L, NA, 20L), delta3 = c(3L, 6L, NA, 12L, 15L, 18L, 
NA)), class = "data.frame", row.names = c(NA, -7L))
 

Комментарии:

1. Это здорово! Однако я хотел бы, чтобы каждый столбец был обусловлен. Если я беру среднее значение delta1, я хочу убедиться, что значения delta1> 6. Если я беру среднее значение delta2, я хочу убедиться, что значения delta2> 6. И т. Д

2. Я понимаю. Извините, я неправильно понял вопрос ранее. Посмотрите мой обновленный ответ, который, я думаю, должен сработать.