根据日期修改数据框的一部分

时间:2019-07-18 03:24:43

标签: r

我有两个数据集,我想修改一列的一部分。 我的第一个数据集包含4列,日期和变量Type A,B和C。

Main_df
Date    TypeA   TypeB   TypeC
1/1/2019    0   0   0
2/1/2019    0   0   0
3/1/2019    0   0   0
4/1/2019    0   100 0
5/1/2019    0   110 0
6/1/2019    0   120 0
7/1/2019    0   130 0
8/1/2019    0   140 0
9/1/2019    0   150 0
10/1/2019   100 0   0
11/1/2019   120 0   0
12/1/2019   130 0   0

第二个具有较少的行,只有一列,在这种情况下称为TypeB,应在匹配日期将其添加到主数据集中的TypeB的当前值

df_i
Date    TypeB
2/1/2019    120
3/1/2019    130
4/1/2019    140
5/1/2019    150

结果应如下所示:

Main_df
Date    TypeA   TypeB   TypeC
1/1/2019    0   0   0
2/1/2019    0   120 0
3/1/2019    0   130 0
4/1/2019    0   240 0
5/1/2019    0   260 0
6/1/2019    0   120 0
7/1/2019    0   130 0
8/1/2019    0   140 0
9/1/2019    0   150 0
10/1/2019   100 0   0
11/1/2019   120 0   0
12/1/2019   130 0   0

我知道如何修改整个列,而不只是部分,尤其是当它必须与日期匹配时。但是如果R无法做到这一点,我会感到惊讶。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

使用dplyr的方法是将两个数据帧绑定在一起,这将为不匹配的列NA group_by赋予Date并取sum删除NA值。

library(dplyr)

bind_rows(Main_df, df1) %>%
   group_by(Date) %>%
   summarise_at(vars(TypeA:TypeC), sum, na.rm = TRUE)


# A tibble: 12 x 4
#   Date      TypeA TypeB TypeC
#   <chr>     <int> <int> <int>
# 1 1/1/2019      0     0     0
# 2 10/1/2019   100     0     0
# 3 11/1/2019   120     0     0
# 4 12/1/2019   130     0     0
# 5 2/1/2019      0   120     0
# 6 3/1/2019      0   130     0
# 7 4/1/2019      0   240     0
# 8 5/1/2019      0   260     0
# 9 6/1/2019      0   120     0
#10 7/1/2019      0   130     0
#11 8/1/2019      0   140     0
#12 9/1/2019      0   150     0