我希望数据不仅没有错过某一年的观察结果,而且对于其他治疗方法也是如此。从那年起不使用的数据。我还有其他因素(并且它们并非所有网站都一致),但这里只是网站和trt组合的一个例子。这是典型的,因为行数也会变化。
ok1<-data.frame(year=(c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5)),
yield=c(NA,65,NA,45,34,65,43,88,NA,33,23,11,23,54,12),
trt=c("ct","nt","dt"), site="a")
ok2<-data.frame(year=(c(1,1,1,2,2,2,3,3,3,4,4,4)),
yield=c(21,22,23,NA,34,65,43,86,39,36,43,41),
trt=c("ct","nt","dt"), site = "b")
ok<-rbind(ok1,ok2)
当然,我可以要求像
这样的逻辑向量complete.cases(ok[,"yield"])
但是,当一个trt丢失时,这会让我在站点a中的收益率数据为1。我怎样才能使用像申请或每年获得完整案例的东西? 我想的第一件事就是施放,然后以某种方式做完成。
okc<-cast(ok, year~trt~site, value="yield")
网站b的数据类似于
> okc
...
, , site = b
trt
years ct dt nt
1 21 23 22
2 NA 65 34
3 43 39 86
4 36 41 43
所以我想完全摆脱第二年的网站b。所以接下来:
okl<-apply(okc,3,complete.cases) #data is complete on 3rd dimension, i.e for a given year at a given site
如何使用它来摆脱每个FALSE的trt site 年度因素组合?
现在通常使用数据框,然后您可以使用逻辑向量来摆脱您不想要的东西。但是我没有经验,也无法找到如何将其应用到上面的df版本的数组中的答案,例如(complete.cases(ok[,"yield"])
。如何通过因子组合(by(ok[, 2:3], ok[,"years"], complete.cases
不起作用)或在阵列上完成案例?还是有更简单的东西?我可以在this question?
答案 0 :(得分:1)
查看由year
和site
的组合定义的每个组,并仅保留没有任何NA
值的组:
ok[with(ok, ave(is.na(yield), list(year,site), FUN=sum)==0 ),]
# year yield trt site
#4 2 45 ct a
#5 2 34 nt a
#6 2 65 dt a
#10 4 33 ct a
#11 4 23 nt a
#12 4 11 dt a
#13 5 23 ct a
#14 5 54 nt a
#15 5 12 dt a
#16 1 21 ct b
#17 1 22 nt b
#18 1 23 dt b
#22 3 43 ct b
#23 3 86 nt b
#24 3 39 dt b
#25 4 36 ct b
#26 4 43 nt b
#27 4 41 dt b
如果您的数据很大,请考虑data.table
以提高速度:
library(data.table)
setDT(ok)
ok[, if(!any(is.na(yield))) .SD, by=.(year,site)]