Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果列1等于零,则将R中的NAs替换为零_R_Dplyr_Mutate_Survey - Fatal编程技术网

如果列1等于零,则将R中的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

我有一份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)

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选项