【问题标题】:Sum some specific rows from a column like Excel can do对 Excel 等列中的某些特定行求和
【发布时间】:2021-08-13 07:22:09
【问题描述】:

我有一个(对我来说)艰巨的任务要解决。 我正在处理降水数据,并希望建立一些 SumS 用于评估不同时间尺度的大雨指数。

我在 Excel 中有一个版本,但我想自动化这个过程。 这是 Excel 正在做的事情:

(这里第一次发帖,我真的不知道如何在这里实现文本中的 Excel 视觉......这就是为什么链接到 png)

最后我的目标是这个。 程序应读取导入 csv,其中仅包含 2 列(日期和降水,单位为 mm)。 然后它应该为不同的时间尺度添加列(如图像中)。在图像中,您可以看到标记单元格的 excel“代码”。它将沉淀柱中的 5 个细胞相加。我宁愿倒着做,所以它应该是 =SUM(B6:B10) 如果 10 分钟的列应该是 B1:B10 等等.... 最后我想从新的代表 5、10、15、20 或 60 分钟内的最大降水量的列。

问题: 我没有找到一种方法来获取降水列中的行总和。总是有一些尺寸错误或其他错误。例如我试过这个:

data <- <- read.csv(file = file.choose(),sep=';')
data$d5 <-0
data$d10 <-0
for (i in 2:nrow(data)) {
  n <- rowSums(Daata$precip.in.mm[i-1:i,])
  data$D5[i] <- n

在这种情况下,他正在考虑维度。我没有看到问题...

如果有人可以帮我解决这个问题,那就太棒了。我猜……很简单(不适合我)的任务。

感谢您的阅读和帮助!

【问题讨论】:

  • 您可以通过给我们一个数据示例来进一步帮助我们。加载 csv 后,键入 dput(head(data,18))。这会将文本打印到终端,然后您可以将其复制到您的问题中。此文本包含您数据的前 18 行,以便我们轻松复制。
  • 导入 csv 仅包含图片中的 A 列和 B 列。 C,D,E,...应由程序编写(就像我对 data$d5
  • 您能否详细说明如何处理最后一次测量。 D=5Min 总结下 5 分钟的降水量。但是,当时间线中没有 5 分钟时,它会做什么?它应该显示 NA 还是只是总结剩余但少于 5 个值?
  • 我猜剩下的数据会是最好的。对于我的工作,我会在大雨事件前后的几个小时内提取数据,这样时间线中的前 120 行和最后 120 行数据对于提取最大值并不那么重要。

标签: r excel


【解决方案1】:

你想要一个所谓的窗口函数。这些滚动一个向量并在这些向量上聚合值。有几个包可以处理这个问题,比如zoorollapply

我已经编写了一个基本的 R 函数来处理这个问题:

window_roll_sum <- function(sorted_input, # Sorted input Vector
                            n=5 # Window size
                            ){
  input_length <- length(sorted_input)
  res <- sapply(1:input_length, #from 1 to input length
                function(x){ # define current pos as x
                  sum(sorted_input[ #sum up the input from x
                    x:(x+min( #to x+window
                        n,
                        input_length-x
                        ) # if remaining vector to small for window
                       # sum up two last value (input length)
                      )
                  ])# end sum
                }# end function
          )
  return(res)
}

现在您可以将此功能应用于您的数据。

data$d5 <- window_roll_sum(data$precip.in.mm, n=5)

重要提示:此函数假定向量按时间排序且测量之间的时间距离相同,因为它盲目地总结了向量的以下n 测量。

【讨论】:

  • 首先,非常感谢您花时间完成这项任务。我在我的代码中实现了你的代码,但我猜有一个问题。我在开始 data$D5
  • 我猜第一个错误是导入文件在第一行有文本。我删除了文本,R 可以运行一切。现在的问题是,在新列中,每秒的值为 NA,其余的值为 0
  • FUN(X[[i]], ...) 中的错误:仅在具有所有数字变量的数据帧上定义,这就是我一直得到的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 2014-03-18
相关资源
最近更新 更多