R中缺失的重新编码
Recoding with missingness in R
我正在尝试根据这四个变量重新编码并创建一个变量。重新编码应该是这样的。如果四列中的任何一列的值为 1,则重新编码的值应该为 1,即使存在任何 0。如果那一行值只有 0 和 NA,那么重新编码的值应该是 0。如果它们都是 NA,那么重新编码的值应该是 NA。
我的数据是这样的。
a = c(1, 1, 1, 1, NA, 0, NA)
b = c(0, 1, NA, 1, 0, NA, NA)
c = c(1, NA, 1, 0, NA, 0, NA)
d = c(1, 0, NA, 1, NA, 0, NA)
df <- data.frame(a,b,c,d)
使用 ifelse
函数,我在下面得到了这个。
> df$recoded <- ifelse(df$a== 1 | df$b == 1 | df$c == 1| df$d == 1, 1, 0)
> df
a b c d recoded
1 1 0 1 1 1
2 1 1 NA 0 1
3 1 NA 1 NA 1
4 1 1 0 1 1
5 NA 0 NA NA NA
6 0 NA 0 0 NA
7 NA NA NA NA NA
问题是当行中有 0 和 NA 时(即第 5 行和第 6 行),重新编码的值应该是 0 而不是 NA。
我想获取如下数据框。
> df
a b c d recoded
1 1 0 1 1 1
2 1 1 NA 0 1
3 1 NA 1 NA 1
4 1 1 0 1 1
5 NA 0 NA NA 0
6 0 NA 0 0 0
7 NA NA NA NA NA
对此有什么想法吗?
提前致谢。
您可以使用apply
df$recoded <- apply(df, 1, function(x) ifelse(all(is.na(x)), NA, max(x, na.rm = TRUE)))
df
# a b c d recoded
#1 1 0 1 1 1
#2 1 1 NA 0 1
#3 1 NA 1 NA 1
#4 1 1 0 1 1
#5 NA 0 NA NA 0
#6 0 NA 0 0 0
#7 NA NA NA NA NA
如果一行中的所有元素都是 NA
,那么 df$recoded
将是 NA
,否则它将是该行的最大值(删除了 NA
).
我正在尝试根据这四个变量重新编码并创建一个变量。重新编码应该是这样的。如果四列中的任何一列的值为 1,则重新编码的值应该为 1,即使存在任何 0。如果那一行值只有 0 和 NA,那么重新编码的值应该是 0。如果它们都是 NA,那么重新编码的值应该是 NA。
我的数据是这样的。
a = c(1, 1, 1, 1, NA, 0, NA)
b = c(0, 1, NA, 1, 0, NA, NA)
c = c(1, NA, 1, 0, NA, 0, NA)
d = c(1, 0, NA, 1, NA, 0, NA)
df <- data.frame(a,b,c,d)
使用 ifelse
函数,我在下面得到了这个。
> df$recoded <- ifelse(df$a== 1 | df$b == 1 | df$c == 1| df$d == 1, 1, 0)
> df
a b c d recoded
1 1 0 1 1 1
2 1 1 NA 0 1
3 1 NA 1 NA 1
4 1 1 0 1 1
5 NA 0 NA NA NA
6 0 NA 0 0 NA
7 NA NA NA NA NA
问题是当行中有 0 和 NA 时(即第 5 行和第 6 行),重新编码的值应该是 0 而不是 NA。
我想获取如下数据框。
> df
a b c d recoded
1 1 0 1 1 1
2 1 1 NA 0 1
3 1 NA 1 NA 1
4 1 1 0 1 1
5 NA 0 NA NA 0
6 0 NA 0 0 0
7 NA NA NA NA NA
对此有什么想法吗?
提前致谢。
您可以使用apply
df$recoded <- apply(df, 1, function(x) ifelse(all(is.na(x)), NA, max(x, na.rm = TRUE)))
df
# a b c d recoded
#1 1 0 1 1 1
#2 1 1 NA 0 1
#3 1 NA 1 NA 1
#4 1 1 0 1 1
#5 NA 0 NA NA 0
#6 0 NA 0 0 0
#7 NA NA NA NA NA
如果一行中的所有元素都是 NA
,那么 df$recoded
将是 NA
,否则它将是该行的最大值(删除了 NA
).