首页 > 解决方案 > 验证 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
  }
}

标签: r

解决方案


我不确定您的数据框的复杂性,但是对于给定的数据布局,我假设您想要一个函数,当给出 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

推荐阅读