【发布时间】:2015-04-23 15:35:32
【问题描述】:
我的数据集是这样的
year Spp CO2 plantN_mean N15_mean plantN_sd N15_sd plantN_se N15_se
1 2004 A amb 17.136667 10.723333 1.2615202 0.7507552 0.7283391 0.4334487
2 2004 A elev 23.310000 13.043333 2.7160081 2.6595175 1.5680880 1.5354731
3 2004 AB amb 14.410000 10.156667 1.1363538 1.7773670 0.6560742 1.0261633
4 2004 AB elev 19.470000 14.786667 2.9173790 3.7358979 1.6843495 2.1569217
5 2004 AM amb 9.603333 13.510000 0.5515735 1.7176437 0.3184511 0.9916821
6 2004 AM elev 16.333333 9.743333 2.3622306 1.8825869 1.3638345 1.0869120
对于plantN_mean 和N15_mean,我需要计算治疗效果比,即elev/amb。我可以使用 plyr 对其中一个变量执行此操作,如下所示:
effect <- ddply(data, .(year,Spp), function (x){
plantN_ratio <- x$plantN_mean[x$CO2 == "elev"]/x$plantN_mean[x$CO2 == "amb"]
data.frame(plantN_ratio)
})
什么是 dplyr 版本,plantN_mean 和 N15_mean?
我想答案可能是这样开始的:
effect <- summary %>% group_by(year,Spp) %>% mutate(
plantN_ratio=plantN_mean[CO2 == "elev"]/plantN_mean[CO2 == "amb"],
N15_ratio= N15_mean[CO2 == "elev"]/N15_mean[CO2 == "amb"])
【问题讨论】:
-
重塑数据可能会更好,这样您就有了 plantN_mean_amb 和 plantN_mean_elev。这就是我想要接近它的方式。
-
我认为您可以分别过滤
amb和elev,然后如果每个year、SPP有一对CO2,则划分列。顺便说一句,你的代码有什么问题。虽然我听不懂summary,但这似乎很好。我以为是data -
如果您在尝试中将
mutate更改为summarise,它与plyr的所需输出不匹配吗?