r - 验证 R 中的测量是否完整、重复或缺少行
问题描述
我有一个数据集,其中包含多个个人的多个时间点的测量值。但是,对于某些人,我有一两个测量值,有些甚至四个(标准是 3)。查看示例数据:
从这个示例表中,我只需要 ID 1 和 2 的测量值,ID 3 有 3 个测量值,但时间点 2 测量了两次。ID 4 和 5 缺少时间点。
有没有办法检查每个 ID 的测量是否完整的数据框?
我为此编写了一些代码:
get.completeTimepoints <- function(dataFrame){
unique.ids <- matrix(unique(dataFrame$id))
n.ids <- nrow(unique.ids)
for (i in 1:n.ids) {
temp.vector <- filter(dataFrame, id == unique.ids[i,]) #selects the id and all its measurements
validate.timepoints(temp.vector) #call validate function
}
}
我目前被困在如何检查是否存在所有三个时间点的测量值(参见下面的函数)。任何帮助,将不胜感激
validate.timepoints <- function(dataFrame){
row.df <- nrow(dataFrame)
if(row.df ==3){
#check if all 3 timepoints are present in the dataframe
}
}
解决方案
我不确定您的数据框的复杂性,但是对于给定的数据布局,我假设您想要一个函数,当给出 id 时,如果时间点正好是 1、2 和 3,则返回 True。
如果是这种情况,以下应该工作:
t = data.frame(ID = c(rep(1,3), rep(2,3), rep(3,3), rep(4,2), rep(5,1)),
tp = c(seq(1,3), seq(1,3), 1,2,2,1,2,1),
v1 = rnorm(12,0,1), v2 = rnorm(12,0,1), v3 = rnorm(12,0,1))
ids = seq(1,5)
validate.timepoints = function(df, id){
return(seq(1,3) %in% t$tp[which(t$ID == id)])
}
check = sapply(ids, function(x) all(validate.timepoints(t, x)))
返回:
> check
[1] TRUE TRUE FALSE FALSE FALSE
推荐阅读
- java - Spring Boot没有拾取属性
- html - Angular 5 - HTTP拦截器拦截401作为状态码0
- fast-ai - fast-ai 2 中的等效 api
- ios - 将 UIGestureRecognizer 添加到自定义 .xib 视图
- c++ - 推力:就位一个成员的exclusive_scan
- reactjs - 来自 React Axios 帖子的 MongoDB 数据库中的数组保存为空白
- amazon-web-services - 如何从 dynamodb 中删除项目
- reactjs - React - 动态导入pdf文件的路径
- django - 无法找到包裹达芙妮
- python - 如何从经过训练的 .pb 模型中获取标签并将其打印在 colab 中的图像上?