r - 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
删除了 ')。
推荐阅读
- json - 是否有可靠的 JSON Schema 验证器库,可以在浏览器(脚本 src)和 Node.js 中轻松使用?
- javascript - 有没有办法在播放后暂停音频?
- javascript - Vue 3 - 'this' 无法访问/'this' 指向错误的部分
- flutter - 在飞镖中按工作日排序地图
- powershell - 如何删除列中的重复项?电源外壳
- javascript - JS:ESlint 说未定义的方法,但它来自外部脚本
- perl - 如何使 Telegram API 调用`users.getUsers`
- sql - Sybase IQ - 提取最近日期不是今天的最近 30 天的数据
- unit-testing - 如果 Java 进程以非零退出代码退出,如何使 JUnit 测试失败?
- arrays - 如何从我的 API 访问嵌套对象