这是一个可重现的测试数据集
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
有没有一种简单的方法可以做到这一点而无需先重新定义为宽格式?
答案 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