r - 找出每个 id 是否有任何非 NA 值
问题描述
在下面的长格式数据框中(即每个测量点一行),我想找出哪个人(变量ID )在Var1和Var2上都只有 NA ,而哪个人至少有一个非 NA 值Var1或Var2。_ 那些只有 NA 值的应该在第 0 组,那些至少有一个非 NA 值的应该在第 1 组。
df <- read.table(text=
"ID Var1 Var2
800057 NA NA
800057 NA NA
800057 NA NA
800057 NA 1
800057 NA NA
800119 NA NA
800119 NA NA
800119 NA NA
834011 1 NA
834011 3 NA
834341 NA NA
834341 5 NA
834341 NA NA
834341 NA NA
834341 3 NA", header=TRUE)
我的结果将如下所示:
df <- read.table(text=
"ID Var1 Var2 Group
800057 NA NA 1
800057 NA NA 1
800057 NA NA 1
800057 NA 1 1
800057 NA NA 1
800119 NA NA 0
800119 NA NA 0
800119 NA NA 0
834011 1 NA 1
834011 3 NA 1
834341 NA NA 1
834341 5 NA 1
834341 NA NA 1
834341 NA 2 1
834341 3 NA 1", header=TRUE)
我想尝试使用group_by(ID)
并mutate()
创建 Group 变量的解决方案。
解决方案
您可以使用 all
:
library(dplyr)
df %>%
group_by(ID) %>%
mutate(Group = as.integer(!all(is.na(Var1) & is.na(Var2))))
# ID Var1 Var2 Group
# <int> <int> <int> <int>
# 1 800057 NA NA 1
# 2 800057 NA NA 1
# 3 800057 NA NA 1
# 4 800057 NA 1 1
# 5 800057 NA NA 1
# 6 800119 NA NA 0
# 7 800119 NA NA 0
# 8 800119 NA NA 0
# 9 834011 1 NA 1
#10 834011 3 NA 1
#11 834341 NA NA 1
#12 834341 5 NA 1
#13 834341 NA NA 1
#14 834341 NA NA 1
#15 834341 3 NA 1
或者可以更改最后一行以使用any
:
mutate(Group = as.integer(any(!is.na(Var1) | !is.na(Var2))))
推荐阅读
- jquery - MustacheJS 有条件地显示 DOM
- appkit - 在 Big Sur 中隐藏默认的 NSOutlineView 展开/折叠箭头
- google-app-engine - 如何在 Google App Engine 中过滤和查看每日日志?
- python - 将字典转换为字符串
- android - 如何使线性布局在协调器布局内可滚动?
- java - 如何重用 maven 的 .repository 内容以避免重新下载每个项目构建的外部依赖项?
- python - 如何使用 get 请求的响应通过 aiohttp 上传文件?
- android - Android Studio HAXM 未安装
- azure - 区域出现故障时单个 Azure VM 会发生什么
- node.js - node.js 的 lambda 函数将如何用于使用存储到 DynamoDB 的 for application/x-www form-urlencoded 数据的发布请求