比较 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))))
我有下面的数据框 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))))