比较 R 中多列的值后如何创建新变量?

How to create a new variable after comparing values from multiple columns in R?

我有下面的数据框 q17。我的目标是按照以下规则替换 "contacts":

ifelse (any values in q17a, q17d, q17f, q17g <5) then contacts is 1

    ifelse (any values in q17a, q17d, q17f, q17g ==5) then contacts is 0

        ifelse (any values in q17a, q17d, q17f, q17g ==8 or 9 or NA) then contacts is 99

q17[1:6,]

   q17a q17d q17f q17g contacts
1     2    5    2   NA       1
2     5    5    5   NA       0
3     1    5    5   NA       1
4     4   NA    5   NA       1
5     1    5    5    5       1
6     3    5   NA   NA       1

我尝试了以下示例,使用提供的答案,但结果并不像我预期的那样。有人可以建议如何解决这个问题吗?

apply(q17[,colnames(q17)[1:4]], 1, function(df) 
  ifelse(any(df<5), 1, 
      ifelse(any(df==5),0, 
            ifelse(df == 8 & df == 9 & is.na(df)), 99))) 
[1]  1 NA  1  1  1  1

我希望结果是:1 0 1 1 1 1 而不是 1 NA 1 1 1 1

我对你的问题感到很困惑......完全按照你的要求,这就是你如何做你所要求的,按照你的例子,而不是你的问题。

q17 <- data.frame(q17a = c(1,2,3,4,5,6,7,8,9,10), q17d = c(2,5,1,4,1,3,4,5,4,4), q17f = c(2,5,5,5,5,NA,5,1,NA,4), q17g = c(2,5,5,5,5,NA,5,1,NA,4))

q17 长得像

   q17a q17d q17f q17g
1     1    2    2    2
2     2    5    5    5
3     3    1    5    5
4     4    4    5    5
5     5    1    5    5
6     6    3   NA   NA
7     7    4    5    5
8     8    5    1    1
9     9    4   NA   NA
10   10    4    4    4

这是我的方法:

apply(q17[,colnames(q17)[1:4]], 1, function(df) 
  ifelse(any(df == 8 | df == 9 | is.na(df)), 99, 
         ifelse(any(df == 5), 0, 
                ifelse(any(df < 5), 1))))

结果是:

 [1]  1  0  0  0  0 99  0 99 99  1

问题编辑后:

apply(q17[,colnames(q17)[1:4]], 1, function(df) 
  ifelse(any(df < 5, na.rm = T), 1, 
         ifelse(any(df == 5, na.rm = T), 0, 
                ifelse(df == 8 & df == 9 & is.na(df), 99))))