【问题标题】:Merge one dataframe with a date vector将一个数据框与日期向量合并
【发布时间】:2015-08-07 02:41:33
【问题描述】:

我想创建一个数据框,通过"ss$Date_R" 列将数据框ss 与带有日期信息的向量daily_vector 合并。我想保留来自daily_vector 的所有行,以了解数据框中ss 中的哪个日期没有数据。我试过使用函数merge然而,当我尝试它时,向量显示为数字列表,而不是日期。

"ss$Date_R" 列是字符列,因为我连接了年月日的信息。

head(ss)
                         Station Variable Value     Date_R
    1    SAN VICENTE DEL PALACIO    TMAX1    90 1985-01-01
    910  SAN VICENTE DEL PALACIO    TMAX2    90 1985-01-02
    1819 SAN VICENTE DEL PALACIO    TMAX3   110 1985-01-03
    2728 SAN VICENTE DEL PALACIO    TMAX4    85 1985-01-04
    3637 SAN VICENTE DEL PALACIO    TMAX5   110 1985-01-05
    4546 SAN VICENTE DEL PALACIO    TMAX6   100 1985-01-06
str(ss)
'data.frame':   9418 obs. of  4 variables:
 $ Station : Factor w/ 3 levels "MEDINA DE RIOSECO",..: 2 2 2 2 2 2 2 2 2 2 ...
 $ Variable: Factor w/ 31 levels "TMAX1","TMAX2",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ Value   : int  90 90 110 85 110 100 80 30 80 70 ...
 $ Date_R  : chr  "1985-01-01" "1985-01-02" "1985-01-03" "1985-01-04" ...


daily_vector <-as.factor(seq(as.Date("1985-01-01"), as.Date("2010-10-14"), by="days"))

有人知道我可以如何合并这两种信息吗? 您是否知道更好的方法来了解数据框ss 中缺少哪一天?

提前致谢

【问题讨论】:

  • 我认为您需要第二个数据框而不是列为 Date_R 的向量,然后是 merge Date_R
  • 我试图用两个变量创建一个数据框(同一个向量用不同的列名重复),但是当我这样做的时候。数据转换为数字(1,2,3...)
  • 您能否通过dput 提供您的部分数据和daily_vector?

标签: r date merge


【解决方案1】:

如果您只想查看daily_vector 中的日期而不是ss$Date_R 中的日期,则无需添加新列。相反,您可以使用

ss$Date_R <- as.Date(ss$Date_R)    
daily_vector <- seq(as.Date("1985-01-01"), as.Date("2010-10-14"), by="days")
missing <- !daily_vector %in% ss$Date_R 
daily_vector[missing]

这会将ss$Date_R 中缺少的日期作为简单的日期向量返回。

编辑:要将缺失日期的行添加到数据框中,您可以按如下方式使用合并:

daily_ex <- daily_vector[1:6] # 6 total dates
ss <- data.frame(V1=rnorm(5), V2=rnorm(5),
            Date_R=c(daily_vector[c(1:4, 6)])) # 5 total rows, skipped date #5 on purpose
Date_R_all <- data.frame(Date_R = daily_ex)
merge(ss, Date_R_all, by="Date_R", all=TRUE)

结果是

1 1985-01-01 -0.2152378 -1.1546424
2 1985-01-02  0.7188043 -0.3882131
3 1985-01-03  0.9581949  1.2717832
4 1985-01-04 -0.6559881 -0.6670120
5 1985-01-05         NA         NA
6 1985-01-06 -0.6285255 -1.2645569

【讨论】:

  • 它可以完美地检查哪些数据不存在!!!但最后我需要获取数据框。有可能在具有值和 NA 的数据框中获得结果吗?这是因为我想用前一个值和下一个值在 NAs 单元格中插入新数据。非常感谢
【解决方案2】:

我认为merge 方式还可以,但首先:(a) 您需要将 Date_R 列的类设置为“日期”; (b) 您的 daily_vector 必须是一个 data.frame(?merge 以获取更多信息)。请尝试以下操作:

ss$Date_R <- as.Date.character(ss$Date_R)
daily <-data.frame((seq(as.Date("1985-01-01"),as.Date("2010-10-14"),by="days")))
colnames(daily_vec) <- "Date_R"
merge(ss, daily_vector, all=TRUE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2018-02-08
    • 2019-08-18
    • 1970-01-01
    相关资源
    最近更新 更多