0

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

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

我想删除measureNA 所在的所有行以及相同的所有相应行subject。所以在上面的例子中,这将产生:

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

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

4

2 回答 2

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
于 2013-02-10T10:43:15.277 回答
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
于 2013-02-10T08:24:52.650 回答