>我有一个数据表(Precip15(,由降水列,年份(DOY(和POSIXct格式的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
提前感谢任何帮助!
下面是一些使用数据框的基本 R 解决方案,DF
在末尾的注释中可重复地定义。 基于dplyr,data.table或zoo软件包的解决方案也是可能的。
1( 根据您想要的内容,在DOY
或Date
(在下面的transform
语句中定义(上聚合aggregate
。 请注意,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( 行和另一个基本 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(应用另一种基本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( XTABxtabs
可用于形成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))
df <- tribble(
~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"
)
df %>%
mutate(Date_Time = ymd_hms(Date_Time)) %>%
mutate(Date = as.Date(Date_Time)) %>%
group_by(Date) %>%
summarise(perDate = sum(Rain_cm, na.rm = TRUE))
Date perDate
<date> <dbl>
1 2019-06-28 0.8
2 2019-06-29 1.4
您可以使用aggregate
和cut
函数来计算每日总降水量值。以下代码将为您提供所需的结果:
precipTotals <- aggreate(df$Rain_cm ~ cut(df$Date_Time, breaks = "day"), x = df,
FUN = sum, na.rm = TRUE)
确保您的沉淀列as.numeric()
并且您的Date_Time
是as.POSIXct()
格式,这将对您有用。