【问题标题】:R to create a new variable, which is the mean of other several variables [duplicate]R创建一个新变量,这是其他几个变量的平均值[重复]
【发布时间】:2021-10-15 23:19:46
【问题描述】:

我是 R 的初学者,最近在使用 mutate() 函数创建新变量时遇到了一些麻烦。数据框“evs”有六个变量:v1、v2、v3、v4、v5、v6。我希望计算它们的平均值并将平均值分配给一个新变量“intp.trust”,所以我使用以下命令:

evs <- mutate(evs,intp.trust= mean("v1","v2","v3","v4","v5","v6"))

但是新变量“intp.trust”变成只有NA。我的命令有什么问题吗?我希望有人可以帮助我。

【问题讨论】:

  • 使用evs %&gt;% mutate(intp.trust = rowMeans(across(v1:v6), na.rm = TRUE)))

标签: r


【解决方案1】:

使用rowMeans,因为它是矢量化的

library(dplyr)
evs <- evs %>% 
   mutate(intp.trust = rowMeans(across(v1:v6), na.rm = TRUE))

【讨论】:

  • 您好,谢谢,我试试!
【解决方案2】:

dplyr

evs %>% rowwise() %>% mutate(intp.trust = mean(v1:v4))

另一种解决方案:

evs$intp.trust <- apply(evs[1:6], 1, mean, na.rm = TRUE)

输出:

      v1       v2       v3       v4 intp.trust
1 3.386651 7.651824 3.537067 7.490539   5.516520
2 9.749669 6.686065 9.328821 1.676758   6.860328
3 1.231070 4.339285 9.274955 1.046044   3.972839

【讨论】:

    【解决方案3】:

    编辑:已更正,我错过了所需的c

    我相信mean 不适用于多个向量,因此您需要告诉 dplyr 逐行执行操作。您可以通过使用“rowwise”函数来做到这一点,即:

    evs <- evs %>% rowwise() %>%
      mutate(intp.trust = mean(c(v1, v2, v3, v4, v5, v6)))
    

    【讨论】: