我想使用mutate()创建一个新变量作为df中其他几个变量的平均值。
我尝试了以下方法
df <- df %>%
na.omit() %>%
mutate(mot_avg = rowMeans(cbind(mot1:mot13)))
和
df <- df %>%
na.omit() %>%
rowwise %>%
mutate(mot_avg = mean(c(mot1:mot13)))
和
df <- df %>%
rowwise %>%
mutate(mot_avg = mean(c(mot1:mot13),na.rm=T))
全部导致以下错误:
Error in mutate_impl(.data, dots) :
Evaluation error: missing value where TRUE/FALSE needed.
我不明白。如果使用na.omit()或na.rm = T,怎么会有缺失的值。如果我在较小的示例df上尝试该代码,则效果很好。这也是为什么我在这里无法提供可复制示例的原因。
仅当我在df上使用baseR代码时,我的df才能得到我想要的东西。
df$mot_avg <- rowMeans(df[,1:14],na.rm=T)
有什么想法吗?
答案 0 :(得分:3)
为什么不将两种方法结合起来?
library(tidyverse)
#Fake Data
set.seed(3)
x <- bind_cols(lapply(1:10, function(i)rnorm(n = 100, mean = 20)))
##For all variables
first_solution <- x %>% mutate(x = rowMeans(x))
##For a subset of variables
solution_subset <- x %>% mutate(x = rowMeans(x %>% select(V9,V10)))