【发布时间】:2019-09-13 22:36:26
【问题描述】:
我想创建一个 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]
}
}
现在,我正在使用第 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 解决方案。我只是想知道是否有更简单的方法。
【问题讨论】:
-
那是哪种编程语言?请相应地标记您的问题。这是吸引懂该语言的人注意的最佳机会。
标签: r date for-loop if-statement