我有这个数据集,其中有6个变量,包含正数、负数或NA。需要根据这些变量的值以如下方式生成一个新的列。
P
如果6个变量中的任何一个都包含一个正数结果
N
如果6个变量中没有一个包含正数结果。
NA
如果6个变量中的所有变量都有 NA
.
MWE
var1 <- c('var1P', 'var1N', 'var1P', 'var1P', NA, 'var1N')
var2 <- c('var2N', 'var2N', 'var2N', 'var2P', NA, 'var2N')
var3 <- c('var3N', 'var3N', 'var3N', 'var3P', NA, 'var3N')
var4 <- c('var4P', 'var4N', 'var4P', 'var4P', NA, 'var4N')
var5 <- c(NA, 'var5N', 'var5N', 'var5P', NA, 'var5N')
var6 <- c(NA, NA, 'var6N', 'var6P', NA, 'var6N')
No <- seq(1:6)
df <- data.frame(No, var1, var2, var3, var4, var5, var6)
编码
dfnew <- df %>%
dplyr::mutate(varif = ifelse(var1 == 'var1P' | var2 == 'var2P' | var3 == 'var3P' | var4 == 'var4P' | var5 == 'var5P' | var6 == 'var6P', 'P', 'N'))
产量
No var1 var2 var3 var4 var5 var6 varif
1 var1P var2N var3N var4P <NA> <NA> P
2 var1N var2N var3N var4N var5N <NA> <NA>
3 var1P var2N var3N var4P var5N var6N P
4 var1P var2P var3P var4P var5P var6P P
5 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
6 var1N var2N var3N var4N var5N var6N N
问题
的 varif
2号应改为: N
而不是 NA
以使其与5号不同,在5号中,所有的数值都是。NA
.
审判失败
impMe <- function (var1, var2, var3, var4, var5, var6) {
x <-ifelse(is.na(var1) & is.na(var2) & is.na(var3) & is.na(var4) & is.na(var5) & is.na(var6), NA,
ifelse (var1 == 'var1P' | var2 == 'var2P' | var3 == 'var3P' | var4 == 'var4P' | var5 == 'var5P' | var6 == 'var6P','P','N'))
return(x)
}
dfnew <- df %>%
dplyr::mutate(varif = impMe(var1, var2, var3, var4, var5, var6))
No var1 var2 var3 var4 var5 var6 varif
1 var1P var2N var3N var4P <NA> <NA> P
2 var1N var2N var3N var4N var5N <NA> <NA>
3 var1P var2N var3N var4P var5N var6N P
4 var1P var2P var3P var4P var5P var6P P
5 <NA> <NA> <NA> <NA> <NA> <NA> <NA>
6 var1N var2N var3N var4N var5N var6N N
在tidyverse中,有一个叫做 case_when()
它做的是多case ifelse()。我注释了 NA
因为它不需要作为 case_when()
将返回 NA
如果所有提到的条件都不符合,这一行就没有必要了!
dfnew <- df %>%
dplyr::mutate(varif = case_when (
## is.na(var1) & is.na(var2) & is.na(var3) & is.na(var4) & is.na(var5) & is.na(var6) ~ NA,
var1 == 'var1P' | var2 == 'var2P' | var3 == 'var3P' | var4 == 'var4P' | var5 == 'var5P' | var6 == 'var6P' ~ 'P',
!is.na(var1) | !is.na(var2) | !is.na(var3) | !is.na(var4) | !is.na(var5) | !is.na(var6) ~ 'N'
))
輸出