我有两个数据集,我想修改一列的一部分。 我的第一个数据集包含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无法做到这一点,我会感到惊讶。有人可以帮忙吗?
答案 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