【问题标题】:Merging two datasets with different date formats and different lengths in R在R中合并具有不同日期格式和不同长度的两个数据集
【发布时间】:2021-02-28 10:44:48
【问题描述】:

希望有人可以帮助我。我有两个数据集:

  1. 第一个具有 30 个县在 10 年内每日辐射值,例如:

   PLACE      DATE        DATA
   <chr>      <date>     <dbl>
1 BEAVER     1951-01-28     0
2 BOX ELDER1 1951-01-28     0
3 BOX ELDER2 1951-01-28     0
4 CACHE      1951-01-28     0
5 CARBON     1951-01-28     0
6 DAGGETT    1951-01-28     0
  1. 第二个具有年度同一时期的癌症值,对于相同的 30 个县,例如:
   PLACE Cancer_Deaths year
1 BEAVER             4 1946
2 BEAVER             3 1947
3 BEAVER             6 1948
4 BEAVER             5 1949
5 BEAVER             2 1950
6 BEAVER             7 1951 

我想做的是将它们合并到同一个数据集中。

我浏览了该网站,但似乎找不到适合我正在尝试做的解决方案。

认为我应该采取的步骤是:

  • 正在将年列转换为年月日列...
  • 获取每个地方的年度值,然后填充每天的行
  • 然后根据日期合并它们

但是我在让它工作时遇到了一些麻烦。非常感谢任何帮助!

【问题讨论】:

  • merge(df1, df2, by = 'PLACE')开头

标签: r dplyr merge


【解决方案1】:

鉴于我正确理解了您的意思,这是我的方法。让我们将您的两个表称为 df1 和 df2。

df1
   PLACE      DATE        DATA
1 BEAVER     1951-01-28     0
2 BOX ELDER1 1951-01-28     0
3 BOX ELDER2 1951-01-28     0
4 CACHE      1951-01-28     0
5 CARBON     1951-01-28     0
6 DAGGETT    1951-01-28     0
df2
   PLACE Cancer_Deaths year
1 BEAVER             4 1946
2 BEAVER             3 1947
3 BEAVER             6 1948
4 BEAVER             5 1949
5 BEAVER             2 1950
6 BEAVER             7 1951 
  1. 在 df1 daily radiation 中,使用 包中的 year() 从列 DATE 中提取 year润滑
library(lubridate)
df1 <- df1 %>%
  mutate(year = lubridate::year(Date))

  PLACE      DATE        DATA  year
  <chr>      <date>     <dbl> <dbl>
1 BEAVER     1951-01-28     0  1951
2 BOX ELDER1 1951-01-28     0  1951
3 BOX ELDER2 1951-01-28     0  1951
4 CACHE      1951-01-28     0  1951
5 CARBON     1951-01-28     0  1951
6 DAGGETT    1951-01-28     0  1951
  1. 然后使用 dplyr 包中的 left_join 将 df1 和 df2 与两者的键 PLACEyear 合并表格。
library(dplyr)

left_join(df1, df2, by=c("PLACE", "year"))

  PLACE    DATE        DATA  year Cancer_Deaths
  <chr>    <date>     <dbl> <dbl>         <dbl>
1 BEAVER   1951-01-28     0  1951             7
2 BOX ELD~ 1951-01-28     0  1951            NA
3 BOX ELD~ 1951-01-28     0  1951            NA
4 CACHE    1951-01-28     0  1951            NA
5 CARBON   1951-01-28     0  1951            NA
6 DAGGETT  1951-01-28     0  1951            NA

【讨论】:

    【解决方案2】:

    您应该按如下方式使用合并命令:

    
    total <- merge(daily_radiation_data_frame_name,cancer_data_frame_name,by="PLACE")
    

    【讨论】:

    • 感谢您的帮助!现在应该可以到了。 ?
    猜你喜欢
    • 1970-01-01
    • 2014-08-13
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 2018-12-04
    • 1970-01-01
    相关资源
    最近更新 更多