ifelse语句在dplyr中返回错误

ifelse语句在dplyr中返回错误,r,dplyr,R,Dplyr,希望为t.test创建一个二进制指示符变量,我得到了一个错误 fd <- fd %>% mutate(Con = ifelse(Intro1 != 2 | Intro1 != 4,0, ifelse(Intro2 != 2 | Intro2 != 4, 1,"NA"))) 是因为nas吗?我试过了 fd <- fd %>% select(c(Intro1 , Intro2)) %>% na.om

希望为t.test创建一个二进制指示符变量,我得到了一个错误

  fd <- fd %>%
    mutate(Con = ifelse(Intro1 != 2 | Intro1 != 4,0,
           ifelse(Intro2 != 2 | Intro2 != 4, 1,"NA")))
是因为nas吗?我试过了

  fd <- fd %>%
        select(c(Intro1 , Intro2)) %>%
        na.omit  %>%
        mutate(Con = ifelse(Intro1 != 2 | Intro1 != 4,0,
             ifelse(Intro2 != 2 | Intro2 != 4, 1,"NA")))
fd%
选择(c(介绍1,介绍2))%>%
na.省略%>%
突变(Con=ifelse(Intro1!=2 | Intro1!=4,0,
ifelse(Intro2!=2 | Intro2!=4,1,“NA”))

基本上,我想做的是遍历所有行,如果Intro1不是2或4,则应用0,如果Intro2不是2或4,则应用1

在语法时使用dplyr
case\u(可能比嵌套的
ifelse
语句更可读):

>fd%>%变异(Con=case\u(
!在%c(2,4)~0中包含1%,
!在%c(2,4)~1中包含2%
))
#一个tibble:8x3
简介1简介2
1钠钠0
2 NA 10
3 NA 2 0
4      1      3     0
5 2 4 NA
6      3      5     0
7 4 NA 1
8 5 NA 0

语法时使用dplyr
case\u(可能比嵌套的
ifelse
语句更可读):

>fd%>%变异(Con=case\u(
!在%c(2,4)~0中包含1%,
!在%c(2,4)~1中包含2%
))
#一个tibble:8x3
简介1简介2
1钠钠0
2 NA 10
3 NA 2 0
4      1      3     0
5 2 4 NA
6      3      5     0
7 4 NA 1
8 5 NA 0

尝试
变异(Con=as.numeric(全部(在%c(2,4)中引入1%,在%c(2,4)中引入2%)
)。另外,您应该使用
NA
,而不是
“NA”
,否则它会将整个变量转换为字符格式。谢谢,Andrew,它确实有效,但是,我相信如果它在简介1中,它不会给出0,如果它在简介2中,它不会给出1。对不起,我没有正确阅读问题!现在我重读了一遍,我不太清楚你想做什么<代码>简介1!=2 |简介1=4
将始终为真-任何数字都不等于2或不等于4!我懂了!我想这可能是你需要的<代码>变异(Con=ifelse(!(在%c(2,4)中引入1%),0,ifelse(!(在%c(2,4)中引入2%,1,NA))实现“非2或4”可能是
!%c(2,4)中的简介%
Intro1!=2和1!=4
。(Andrew以35秒的优势击败了我)尝试
mutate(Con=as.numeric(all)(在%c(2,4)中引入1%,在%c(2,4)中引入2%)
。另外,您应该使用
NA
,而不是
“NA”
,否则它会将整个变量转换为字符格式。谢谢,Andrew,它确实有效,但是,我相信如果它在简介1中,它不会给出0,如果它在简介2中,它不会给出1。对不起,我没有正确阅读问题!现在我重读了一遍,我不太清楚你想做什么<代码>简介1!=2 |简介1=4将始终为真-任何数字都不等于2或不等于4!我懂了!我想这可能是你需要的<代码>变异(Con=ifelse(!(在%c(2,4)中引入1%),0,ifelse(!(在%c(2,4)中引入2%,1,NA))实现“非2或4”可能是
!%c(2,4)中的简介%
Intro1!=2和1!=4
。(Andrew以35秒的优势击败了我)有趣的是,我有Dplyr软件包,但是RStudio找不到case_当.is引入Dplyr 0.5.0时,你可以使用
packageVersion(“Dplyr”)
检查你的软件包版本,所以我应该重新安装吗?似乎不在我的版本中。我喜欢你的解决方案。“0.4.3”是版本号,但是在mutate_impl(.data,dots)中出现错误-错误:不兼容的大小(6299),预期为1(组大小)或1有趣,我有Dplyr包,但是RStudio找不到case_当.is在Dplyr 0.5.0中引入时,你可以使用
packageVersion检查你的包版本(“dplyr”)
那么我应该重新安装吗?我的版本中似乎没有。我喜欢你的解决方案。“0.4.3”是我的解决方案,但出现错误-mutate_impl(.data,dots)中出错:大小不兼容(6299),预期为1(组大小)或1
  fd <- fd %>%
        select(c(Intro1 , Intro2)) %>%
        na.omit  %>%
        mutate(Con = ifelse(Intro1 != 2 | Intro1 != 4,0,
             ifelse(Intro2 != 2 | Intro2 != 4, 1,"NA")))
> fd <- data_frame(Intro1 = c(NA,NA,NA, 1:5), Intro2 = c(NA,1:5, NA,NA))
> fd %>% mutate(Con = case_when(
     ! Intro1 %in% c(2,4) ~ 0,
     ! Intro2 %in% c(2,4) ~ 1
 ))

# A tibble: 8 x 3
  Intro1 Intro2   Con
   <int>  <int> <dbl>
1     NA     NA     0
2     NA      1     0
3     NA      2     0
4      1      3     0
5      2      4    NA
6      3      5     0
7      4     NA     1
8      5     NA     0