Вы очень в правильном направлении.Вы можете избежать bind_cols
с помощью твика в вашем коде.Более того, NA
поддерживаются даже в rowMeans
.Я изменил пример данных, используемых @Tung
, чтобы включить несколько NAs
.Решения могут быть следующими:
Вариант № 1: Использование dplyr
в подходе, аналогичном OP.
library(dplyr)
DF %>% mutate(eng = rowMeans(select(.,starts_with("eng")), na.rm = TRUE))
# # A tibble: 4 x 5
# id eng1 eng2 eng3 eng
# <int> <dbl> <dbl> <dbl> <dbl>
# 1 1 50.0 NA 20.0 35.0
# 2 2 NA 100 10.0 55.0
# 3 3 20.0 150 80.0 83.3
# 4 4 30.0 200 40.0 90.0
Вариант № 2: Использование apply
DF$eng <- apply(DF[,grep("eng",names(DF))], 1, mean, na.rm = TRUE)
DF
# # A tibble: 4 x 5
# id eng1 eng2 eng3 eng
# <int> <dbl> <dbl> <dbl> <dbl>
# 1 1 50.0 NA 20.0 35.0
# 2 2 NA 100 10.0 55.0
# 3 3 20.0 150 80.0 83.3
# 4 4 30.0 200 40.0 90.0
Пример данных:
DF = data_frame(id = 1:4,
eng1 = c(50, NA, 20, 30),
eng2 = c(NA, 100, 150, 200),
eng3 = c(20, 10, 80, 40))