如何以长格式删除纵向数据的不完整数据?

时间:2013-02-10 08:05:04

标签: r

这是一个可重现的测试数据集

mydata <- structure(list(subject = c(1, 1, 1, 2, 2, 2, 3, 3, 3), time = c(0, 1, 2, 0, 1, 2, 0, 1, 2), measure = c(10, 12, 8, 7, 0, 0, 5, 3, NA)), .Names = c("subject", "time", "measure"), row.names = 1:9, class = "data.frame")

mydata

subject  time  measure
1          0      10
1          1      12
1          2       8
2          0       7
2          1       0
2          2       0
3          0       5
3          1       3
3          2      NA

我想删除measure为NA 的所有行以及相同subject的所有相应行。所以在上面的例子中会产生:

subject  time  measure
1          0      10
1          1      12
1          2       8
2          0       7
2          1       0
2          2       0

有没有一种简单的方法可以做到这一点而无需先重新定义为宽格式?

2 个答案:

答案 0 :(得分:2)

我认为这不需要reshaping甚至ave。如果我理解你的问题,那只是一个subsetting问题。

mydata[!with(mydata, subject %in% subject[is.na(measure)]), ]

#   subject time measure
# 1       1    0      10
# 2       1    1      12
# 3       1    2       8
# 4       2    0       7
# 5       2    1       0
# 6       2    2       0

答案 1 :(得分:0)

您可以使用:

mydata[with(mydata, as.logical(ave(measure, subject, FUN=function(x) ifelse(any(is.na(x)), 0, 1)))),]
#   subject time measure
# 1       1    0      10
# 2       1    1      12
# 3       1    2       8
# 4       2    0       7
# 5       2    1       0
# 6       2    2       0