如果列1等于零,则将R中的NAs替换为零
我有一份4份量表的问卷数据,其中的问题设计有NAs。例如,如果问题1的答案没有被0编码,那么其余的问题将不适用于参与者,并将被编码为NA。然而,这些NAs不同于那些只是选择忽略这个问题的人。因此,我试图在第1季度的答案为0的情况下,将NAs替换为第2季度和第3季度的0,否则请保留NAs。 我制作了一个数据框架来进一步解释我的情况:如果列1等于零,则将R中的NAs替换为零,r,dplyr,mutate,survey,R,Dplyr,Mutate,Survey,我有一份4份量表的问卷数据,其中的问题设计有NAs。例如,如果问题1的答案没有被0编码,那么其余的问题将不适用于参与者,并将被编码为NA。然而,这些NAs不同于那些只是选择忽略这个问题的人。因此,我试图在第1季度的答案为0的情况下,将NAs替换为第2季度和第3季度的0,否则请保留NAs。 我制作了一个数据框架来进一步解释我的情况: Q1 <- c(0,0,1,2,0,4) Q2 <- c(NA,NA,2,1,NA,NA) Q3 <- c(NA,NA,2,1,NA,4) dat
Q1 <- c(0,0,1,2,0,4)
Q2 <- c(NA,NA,2,1,NA,NA)
Q3 <- c(NA,NA,2,1,NA,4)
data <- cbind(Q1,Q2,Q3)
Q1 Q2 Q3
1 0 NA NA
2 0 NA NA
3 1 2 2
4 2 1 1
5 0 NA NA
6 4 NA 4
在预期输出中,如果Q1为0,则Q2和3中的NAs更改为0。对于参与者6,NA保持原样
我在自学R,并且一直在努力解决这个问题。
我试过if、mutate\u if、if\u else和case\u when函数都没有用。谁来帮帮我
下面是一个我尝试过的代码示例,它给了我一个错误
data %>%
ifelse (Q1 == 0) {
mutate(Q2 = coalesce(Q2,0))
}
这应该起作用:
library(dplyr)
data %>%
as.data.frame() %>%
mutate(across(c(Q2,Q3), ~case_when(Q1 == 0 ~ 0, TRUE ~ .)))
# Q1 Q2 Q3
# 1 0 0 0
# 2 0 0 0
# 3 1 2 2
# 4 2 1 1
# 5 0 0 0
# 6 4 NA 4
您的代码失败,因为ifelse需要一个向量作为输入,并提供一个向量作为输出。如果需要,也可以使用ifelse而不是case_
library(dplyr)
data %>%
as.data.frame() %>%
mutate(across(c(Q2,Q3), ~ifelse(Q1 == 0, 0, .)))
这应该起作用:
library(dplyr)
data %>%
as.data.frame() %>%
mutate(across(c(Q2,Q3), ~case_when(Q1 == 0 ~ 0, TRUE ~ .)))
# Q1 Q2 Q3
# 1 0 0 0
# 2 0 0 0
# 3 1 2 2
# 4 2 1 1
# 5 0 0 0
# 6 4 NA 4
您的代码失败,因为ifelse需要一个向量作为输入,并提供一个向量作为输出。如果需要,也可以使用ifelse而不是case_
library(dplyr)
data %>%
as.data.frame() %>%
mutate(across(c(Q2,Q3), ~ifelse(Q1 == 0, 0, .)))
在baser中,我们可以为i创建一个逻辑索引,选择j中的列并进行赋值
data[!data$Q1, -1] <- 0
data
# Q1 Q2 Q3
#1 0 0 0
#2 0 0 0
#3 1 2 2
#4 2 1 1
#5 0 0 0
#6 4 NA 4
数据
在baser中,我们可以为i创建一个逻辑索引,选择j中的列并进行赋值
data[!data$Q1, -1] <- 0
data
# Q1 Q2 Q3
#1 0 0 0
#2 0 0 0
#3 1 2 2
#4 2 1 1
#5 0 0 0
#6 4 NA 4
数据
data.table选项
data.table选项