【发布时间】:2017-02-23 23:49:20
【问题描述】:
我在 R 中按日期和时间合并了两个数据帧(按日期时间)。一个数据框是一个简单的序列,另一个有 6242 obs 的数据,但我需要每小时的数据(即使它是零)
当我合并时,我的结果重复了匹配的行,而不是插入它们。合并功能是否有一个附加功能,我可以使用它来保留所有行,但不是那些具有重复日期且没有信息的行?即我想要第 1933 行而不是 1934 行。
x <- data.frame (DateTime = seq(as.POSIXct("1986-01-01"),
as.POSIXct("2012-04-27"),
by=(3600)))
y <- read.csv("TS1.csv", header = FALSE, as.is = TRUE)
names(y) <- c("Date", "Time", "Rainfall")
y$Station<- rep("D1253",length(6242))
#reformat so date is the same
y$Date <- as.Date(y$Date, format = "%m/%d/%Y")
y$DateTime <- paste(y$Date, y$Time, sep=" ")
>head(y)
Date Time Rainfall Station DateTime
1 1986-01-01 21:00 0.01 D1253 1986-01-01 21:00
2 1986-01-02 9:00 0.01 D1253 1986-01-02 9:00
3 1986-01-02 10:00 0.01 D1253 1986-01-02 10:00
4 1986-01-02 11:00 0.01 D1253 1986-01-02 11:00
5 1986-01-02 12:00 0.01 D1253 1986-01-02 12:00
6 1986-01-02 13:00 0.01 D1253 1986-01-02 13:00
#Combine datasets
z<- merge(x, y, by='DateTime', all=TRUE) #the all.x=TRUE gives me all NAs
z$Rainfall[is.na(z$Rainfall)] <- 0.00
> head(z)
DateTime Date Time Rainfall Station
1933 1986-03-14 18:00:00 1986-03-14 18:00 0.01 D1253
1934 1986-03-14 19:00:00 <NA> <NA> 0.00 <NA>
1935 1986-03-14 19:00:00 1986-03-14 19:00 0.01 D1253
1936 1986-03-14 20:00:00 <NA> <NA> 0.00 <NA>
1937 1986-03-14 20:00:00 1986-03-14 20:00 0.01 D1253
1938 1986-03-14 21:00:00 <NA> <NA> 0.00 <NA>
1939 1986-03-14 21:00:00 1986-03-14 21:00 0.09 D1253
1940 1986-03-14 22:00:00 <NA> <NA> 0.00 <NA>
1941 1986-03-14 22:00:00 1986-03-14 22:00 0.02 D1253
1942 1986-03-14 23:00:00 <NA> <NA> 0.00 <NA>
【问题讨论】:
-
我们没有
TS1.csv。请做dput(y),然后在你的问题陈述问题中作为y <- whateverThatdputIs -
另外,请查看
dplyr::left_join() -
你为什么要
y$Station <- rep("D1253", length(6242)?这和rep("D1253",1)一样 -
我觉得有太多数据要做
dput(y)? 6242 特定行