我想创建一个for循环,根据两列是否匹配,用上一年(同月)的值替换行中的值。
我已经创建了for循环的结构,但是在确定如何获取for循环以引用上一年的值方面尚未取得任何进展。
这是一个示例数据集:
fish <- c("A","A","B","B","C","C")
fish_wt<-c(2,3,4,5,5,7)
fish_count<-c(2,200,47,78,5,845)
date <- as.Date(c('2010-11-1','2009-11-1','2009-11-1','2008-11-1','2008-2-1','2007-2-1'))
data <- data.frame(fish,fish_wt,fish_count,date)
data$newcount<-0
到目前为止,这是我的for循环:
for (i in 1:nrow(data)) {
if (data$fish_wt[i] == data$fish_count[i]) {
data$newcount[i] <- 10
} else {
data$newcount[i] <- data$fish_count[i]
}
}
现在,我使用的是row-1的值,该值适用于此小型数据集,但不适用于较大的记录,因为两条鱼A行不会相邻。
for (i in 1:nrow(data)) {
if (data$fish_wt[i] == data$fish_count[i]) {
data$newcount[i] <- data$newcount[data$date==data$date[i-1])]
} else {
data$newcount[i] <- data$fish_count[i]
}
}
这就是我希望数据集的外观:
fish fish_wt fish_count date newcount
1 A 2 2 2010-11-01 200
2 A 3 200 2009-11-01 200
3 B 4 47 2009-11-01 47
4 B 5 78 2008-11-01 78
5 C 5 5 2008-02-01 845
6 C 7 845 2007-02-01 845
我曾想过用鱼将行分开,然后使用row-1解决方案。我只是想知道是否有更简单的事情。
答案 0 :(得分:0)
为解决此问题,我按鱼,年和月(长格式)设置了平均温度表,然后合并数据集,并使用fish_wt == fish_count的任何行的平均值。