我有一个宽格式的问卷数据框架,每一列代表一个问卷项目。
我知道如何重新编码列中的值,并根据在其他列中找到的值创建新列。然而,我在尝试在一个管道中同时做这两件事时遇到了问题。
我的数据如下:
df <- data.frame(Q1 = c(1, 2, 1, 4), Q2 = c(4, 2, 3, 1), Q3 = c(3, 3, 2, 3),
Q4 = c(4, 4, 2, 4), Q5 = c(4, 2, 3, 1), Q6 = c(7, 2, 3, 1))
以我的示例数据集为例,我打算从列Q1、Q2和Q3中减去1,并用新的(减去的)值替换原始值同时,我希望创建一个新列,其中包含Q1、Q2和Q3的平均值,同时忽略任何NA值或3的值。
我尝试了下面的代码,但是Q1、Q2和Q3列没有用减去的值更新。
library(dplyr)
df$mean <- df %>%
select(Q1, Q2, Q3) %>%
mutate_all(funs(. - 1)) %>%
apply(1, function(x) {
round(mean(x[!is.na(x) & x != 3]), digits = 2)
})
我试过用
mutate_at
然后
mutate
在管子里但是,最终结果会删除所有未选中的列。我仍然希望其他列位于最终数据集中:
df <- df %>%
select(Q1, Q2, Q3) %>%
mutate_all(funs(. - 1)) %>%
mutate(mean = apply(., 1, function(x)
round(mean(x[!is.na(x) & x != 3]), digits = 2)))
谢谢,非常感谢!