首页 > 解决方案 > 使用 mutate() dplyr 计算平均值时出错

问题描述

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

有任何想法吗?

标签: rdplyr

解决方案


为什么不将这两种方法结合起来呢?

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

推荐阅读