【发布时间】:2014-12-01 15:52:20
【问题描述】:
我正在尝试计算访问不同巢穴的小鸡之间的体重变化。这需要 R 查找当前行中的嵌套代码,找到上一次访问该嵌套的时间,并从当前访问中减去上一次访问的权重。对于每个巢穴的第一次访问,我想输出当前重量(即,好像上次不存在的访问时的重量为零)。
我的数据格式为:
Nest <- c(a,b,c,d,e,c,b,c)
Weight <- c(2,4,3,3,2,6,8,10)
df <- data.frame(Nest, Weight)
所以这里想要的输出是:
Change <- c(2,4,3,3,2,3,4,4)
通过子集到单个嵌套并使用 for 循环,我已经实现了一次所需的输出:
tmp <- subset(df, Nest == "a")
tmp$change <- tmp$Weight
for(x in 2:(length(tmp$Nest))){
tmp$change[x] <- tmp$Weight[(x)] - tmp$Weight[(x-1)]
}
但是当我尝试将其放入 ddply 时
df2 <- ddply(df, "Nest", function(f) {
f$change <- f$Weight
for(x in 2:(length(f$Nest))){
f$change <- f$Weight[(x)] - f$Weight[(x-1)]
}
})
输出给出一个空白的 data.frame(0 个变量,0 个变量)。
我是否以正确的方式接近此问题,但代码错误?还是有更好的方法?
提前致谢!
【问题讨论】: