【发布时间】:2017-09-20 22:47:39
【问题描述】:
我希望数据不仅不会丢失给定年份的观察结果,而且还希望不使用该年份的其他治疗数据。我还有其他因素(并且它们在站点之间并不完全一致),但这里有一个示例,只是站点和 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 这样的产量数据年份。我如何使用 apply 或 by 之类的东西来获取每年的完整案例? 我想到的第一件事是投射,然后以某种方式完成 complete.cases:
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 的第 2 年。那么接下来:
okl<-apply(okc,3,complete.cases) #data is complete on 3rd dimension, i.e for a given year at a given site
我如何使用它来消除每个 FALSE 的 trtsiteyear 因子组合?
现在通常使用数据框,然后您可以使用逻辑向量来摆脱您不想要的东西。但是我没有经验,也找不到关于如何将其应用回数组的答案,例如上面的 df 版本,例如(complete.cases(ok[,"yield"])。如何通过因子组合(by(ok[, 2:3], ok[,"years"], complete.cases 不起作用)或在数组上完成案例?或者有什么更简单的吗?我可以用完整的案例代替this question?中的密度函数吗?
【问题讨论】: