繁体   English   中英

具有多个列和NA的R嵌套Ifelse

[英]R-Nested Ifelse with multiple columns and NAs

我有一个用于比赛的数据框:

df <- data.frame(ID=c(1,2,3,4,5,6), Condition=c(1,2,2,1,1,2), White=c(1,1,NA,NA,NA,NA), Black=c(2,NA,NA,NA,2,NA), Asian=c(NA, NA, NA, 3, 3, 3), AmerIndian=c(NA,NA,4,NA,NA,NA), NatHawaiian=c(NA, NA, NA, 5, NA, NA))

并且我想开发一个新的比赛领域,无论条件2为何,都将填写一个新领域。

这是我尝试的:

df$var <-ifelse(as.numeric(df$White)==1&!is.na(df$White),"White", 
+     ifelse(as.numeric(df$Black)==2&!is.na(df$Black),"Black",
+        ifelse(as.numeric(df$Asian)==3&!is.na(df$Asian),"Asian",
+           ifelse(as.numeric(df$AmerIndian)==4&!is.na(df$AmerIndian),"AmerIndian",
+               ifelse(as.numeric(df$NatHawaiian)==5&!is.na(df$NatHawaiian),"NatHawaiian",NA)))))

我收到此错误:

Error in +ifelse(as.numeric(df$NatHawaiian) == 5 & !is.na(df$NatHawaiian),  : 
  invalid argument to unary operator

根据您输入的代码和生成的错误,我建议在每个ifelse语句的开头删除加号。 完成后,您共享的代码:

df$var <- ifelse(
  as.numeric(df$White) == 1 & !is.na(df$White),
  "White", ifelse(
    as.numeric(df$Black) == 2 & !is.na(df$Black),
    "Black", ifelse(
      as.numeric(df$Asian) == 3 & !is.na(df$Asian),
      "Asian", ifelse(
        as.numeric(df$AmerIndian) == 4 & !is.na(df$AmerIndian),
        "AmerIndian", ifelse(
          as.numeric(df$NatHawaiian) == 5 &
            !is.na(df$NatHawaiian),
          "NatHawaiian",
          NA
        )
      )
    )
  )
)

将生成此输出:

  ID Condition White Black Asian AmerIndian NatHawaiian        var
1  1         1     1     2    NA         NA          NA      White
2  2         2     1    NA    NA         NA          NA      White
3  3         2    NA    NA    NA          4          NA AmerIndian
4  4         1    NA    NA     3         NA           5      Asian
5  5         1    NA     2     3         NA          NA      Black
6  6         2    NA    NA     3         NA          NA      Asian

您可以尝试使用tidyverse例如:

df %>%
  gather(key = "race", value = "val", 3:7) %>%
  mutate( rc = if_else((Condition == 2 & !is.na(val)), race, NULL)) %>%
  spread(race, val)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM