r - R 中是否有一个函数可以根据年份日期对值求和?

标签 r date sum posixct

我有一个数据表 (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) 合计 aggregateDOYDate (在下面的 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/

相关文章:

php - Mysql如何获取数据库中多列的SUM

r - 获取 R 调色板中的颜色名称

r - 我可以告诉 ggpairs 使用对数刻度吗?

date - 昨天的日期 flutter 朔迷离

mysql - 在 Symfony 2.5 和 Doctrine 查询生成器中使用圆括号 ( > )

mysql - SQL 查询包括 SUM 和 GROUPBY

javascript - 在 R 或 Python 中在 map 绘图标记中添加图像/视频的最简单方法单击弹出窗口/信息窗口

r - 通过对另一个矩阵的行求和在 R 中创建新矩阵

sql - 找出年差的最大值

python - 如何从python中的字符串中获取日期值?