使用mutate()dplyr计算平均值时出错

时间:2019-02-17 15:37:19

标签: r dplyr mutate

我想使用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)

有什么想法吗?

1 个答案:

答案 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)))