【问题标题】:Replace values in column with previous year's value based on another column将列中的值替换为基于另一列的上一年的值
【发布时间】: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


【解决方案1】:

作为该问题的解决方案,我建立了一个按鱼、年和月(长格式)的平均温度表,然后合并数据集并使用 fish_wt==fish_count 的任何行的平均值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 2021-05-10
    • 2021-11-09
    • 2020-08-13
    相关资源
    最近更新 更多