r - 按唯一 ID 填写组的缺失数据
问题描述
我的临床数据结构如下所示:
patientid <- c(100,100,100,101,101,101,102,102,102,104,104,104)
group <- c(1,1,NA,2,NA,NA,1,1,1,2,2,NA)
Data<- data.frame(patientid=patientid,group=group)
如果缺少数据,则 NA 应成为与同一患者 ID 的其他组值相同的值。换句话说,患者总是在同一组中,需要填写缺失的数据以反映这一点。所以它应该是这样的:
patientid <- c(100,100,100,101,101,101,102,102,102,104,104,104)
group <- c(1,1,1,2,2,2,1,1,1,2,2,2)
Data<- data.frame(patientid=patientid,group=group)
解决方案
您可以编写一个小辅助函数,例如:
fun <- function(x) replace(x, is.na(x), x[!is.na(x)][1])
然后,您可以在基础 R 中使用transform
它within
:
transform(Data, group = ave(group, patientid, FUN = fun))
# patientid group
# 1 100 1
# 2 100 1
# 3 100 1
# 4 101 2
# 5 101 2
# 6 101 2
# 7 102 1
# 8 102 1
# 9 102 1
# 10 104 2
# 11 104 2
# 12 104 2
甚至与其他软件包:
library(data.table)
as.data.table(Data)[, group := fun(group), patientid][]
即使组值不是每个患者“患者 ID”的第一个值,这也将起作用。试试,例如:
# First row of "group" is `NA`
Data <- Data[c(3, 1, 2, 4:nrow(Data)), ]
推荐阅读
- node.js - 找不到模块:无法解析“aws4”
- python - python OpenCV中的ValueError - 没有足够的值来解包(预期3,得到2)
- javascript - 嵌套的 setTimeout 方法如何按顺序执行?
- r - 如何为 R Shiny 中的可扩展矩阵自动生成顺序列标题?
- java - 为什么同一组中的 kafka-0.9 多个消费者使用相同的消息
- python - 如何将照片上传到 MySQL 并浏览
- google-chrome-extension - Chrome 扩展和第三方 cookie 替代方案
- file - 如何打开带有 .zvX 文件扩展名的文件?
- postgresql - 如果 nickName 不为 null,则按 nickName 排序,否则按 firstName 排序
- api - Facebook API - 发布到页面不起作用