我有一个数据表 (Precip15),其中包含 POSIXct 格式的降水量、年份日期 (DOY) 和 Date_Time 列。我需要能够看到每天记录的总降水量 (Rain_cm)。有什么建议么?
数据表格式的示例如下所示:
DOY Rain Rain_cm Date_Time
179 6 0.6 2019-06-28 15:00:00
179 0 NA 2019-06-28 15:15:00
179 2 0.2 2019-06-28 16:45:00
180 0 NA 2019-06-29 10:00:00
180 10.2 1.2 2019-06-29 10:15:00
180 2 0.2 2019-06-29 13:00:00
我需要它看起来像这样:
DOY Rain_cm
179 0.8
180 1.4
或者可能:
Date Rain_cm
2019-06-28 0.8
2019-06-29 1.4
预先感谢您的帮助!
最佳答案
以下是一些使用数据框 DF
的基本 R 解决方案在最后的注释中重复定义。基于 dplyr、data.table 或 Zoo 包的解决方案也是可能的。
1) 合计 aggregate
上DOY
或Date
(在下面的 transform
语句中定义)取决于您想要的。请注意aggregate
自动删除带有 NA 的行。
aggregate(Rain_cm ~ DOY, DF, sum)
## DOY Rain_cm
## 1 179 0.8
## 2 180 1.4
DF2 <- transform(DF, Date = as.Date(Date_Time))
aggregate(Rain_cm ~ Date, DF2, sum)
## Date Rain_cm
## 1 2019-06-28 0.8
## 2 2019-06-29 1.4
2) rowsum 另一个基本的 R 解决方案是 rowsum
返回一个一列矩阵,其中行名称是分组变量的值。 DF2
来自(1)。
with(na.omit(DF), rowsum(Rain_cm, DOY))
## [,1]
## 179 0.8
## 180 1.4
with(na.omit(DF2), rowsum(Rain_cm, Date))
## [,1]
## 2019-06-28 0.8
## 2019-06-29 1.4
3) tapply 另一种基本 R 方法是 tapply
。这会产生一个命名的数字向量。 DF2
来自(1)。
with(DF, tapply(Rain_cm, DOY, sum, na.rm = TRUE))
## 179 180
## 0.8 1.4
with(DF2, tapply(Rain_cm, Date, sum, na.rm = TRUE))
## 2019-06-28 2019-06-29
## 0.8 1.4
4) xtabs xtabs
可用于形成 xtabs
table
目的。 DF2
来自(1)。
xtabs(Rain_cm ~ DOY, DF)
## DOY
## 179 180
## 0.8 1.4
xtabs(Rain_cm ~ Date, DF2)
## Date
## 2019-06-28 2019-06-29
## 0.8 1.4
注意
假设可重现形式的数据为:
Lines <- "DOY Rain Rain_cm Date_Time
179 6 0.6 2019-06-28 15:00:00
179 0 NA 2019-06-28 15:15:00
179 2 0.2 2019-06-28 16:45:00
180 0 NA 2019-06-29 10:00:00
180 10.2 1.2 2019-06-29 10:15:00
180 2 0.2 2019-06-29 13:00:00"
L <- readLines(textConnection(Lines))
DF <- read.csv(text = gsub(" +", ",", Lines))
关于r - R 中是否有一个函数可以根据年份日期对值求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60172874/