首页 > 解决方案 > 根据日期修改部分数据框

问题描述

我有两个数据集,我想修改一列的一部分。我的第一个数据集有 4 列、日期和变量类型 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​​ 不能做到这一点,我会感到惊讶。有人可以帮忙吗?

标签: r

解决方案


使用dplyr一种方法是将两个数据框绑定在一起,这将为NA不匹配的列提供,group_by Datesum删除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

推荐阅读