R 如何更新和替换部分旧数据
我想合并df OldData和NewData。 在这种情况下,2015年11月和2015年12月出现在df中。 由于NewData是最准确的更新,我想使用df NewData中的值更新2015年11月和2015年12月的值,当然还要添加2016年1月和2016年2月的记录 有人能帮忙吗R 如何更新和替换部分旧数据,r,R,我想合并df OldData和NewData。 在这种情况下,2015年11月和2015年12月出现在df中。 由于NewData是最准确的更新,我想使用df NewData中的值更新2015年11月和2015年12月的值,当然还要添加2016年1月和2016年2月的记录 有人能帮忙吗 OldData Month Value 1 Jan-2015 3 2 Feb-2015 76 3 Mar-2015 31 4 Apr-2015 45 5 May-2
OldData
Month Value
1 Jan-2015 3
2 Feb-2015 76
3 Mar-2015 31
4 Apr-2015 45
5 May-2015 99
6 Jun-2015 95
7 Jul-2015 18
8 Aug-2015 97
9 Sep-2015 61
10 Oct-2015 7
11 Nov-2015 42
12 Dec-2015 32
NewData
Month Value
1 Nov-2015 88
2 Dec-2015 45
3 Jan-2016 32
4 Feb-2016 11
这是我想要的输出:
JoinData
Month Value
1 Jan-2015 3
2 Feb-2015 76
3 Mar-2015 31
4 Apr-2015 45
5 May-2015 99
6 Jun-2015 95
7 Jul-2015 18
8 Aug-2015 97
9 Sep-2015 61
10 Oct-2015 7
11 Nov-2015 88
12 Dec-2015 45
13 Jan-2016 32
14 Feb-2016 11
感谢@akrun,问题解决了,下面的代码运行顺利
rbindlist(列表(旧数据,新数据))[!重复(月,fromLast=TRUE)]
更新:现在,让我们升级一下我们的问题。
假设我们的OldData和NewData有另一个名为“Type”的列。
这次我们如何合并/更新它
>旧数据
月份类型值
1 2015-01 A 3
2 2015-02 A 76
3 2015-03 A 31
4 2015-04 A 45
5 2015-05 A 99
6 2015-06 A 95
7 2015-07 A 18
8 2015-08 A 97
9 2015-09 A 61
10 2015-10 A 7
11 2015-11 B 42
12 2015-12 C 32
13 2015-12 D 77
>新数据
月份类型值
1 2015-11 A 88
2 2015-12 C 45
3 2015-12 D 22
4 2016-01 A 32
5 2016-02 A 11
JoinData将假设更新NewData ass中的所有值,如下所示:
>连接数据
月份类型值
1 2015-01 A 3
2 2015-02 A 76
3 2015-03 A 31
4 2015-04 A 45
5 2015-05 A 99
6 2015-06 A 95
7 2015-07 A 18
8 2015-08 A 97
9 2015-09 A 61
10 2015-10 A 7
11 2015-11 B 42
12 2015-11 A 88(最初不包括,根据新数据添加)
12 2015-12 C 45(由NewData更新值)
13 2015-12第22天(由NewData更新值)
14 2016-01 A 32(新数据新增)
15 2016-02 A 11(新数据新增)
谢谢@akrun:我这里也有第二个问题的答案。
谢谢大家的帮助!
答案如下:
d1这里有一个使用
数据的选项。表
(类似于注释中提到的@thelatemail)
或
欢迎来到SO!最好让我们看看你做了什么。首先,查看
merge
函数。请您自己尝试使用此函数,并张贴您的地址。rbind(NewData,OldData)
,然后使用duplicated
扔掉旧记录。不过,让我有另一个列调用“Type”,我们可以使用吗!使用rbind和duplicated?atsang01复制它-您最好使用?match
或?merge
逻辑。谢谢@latemail。让我来做一点匹配和合并的工作,一旦我找到了多条件更新,我会在这里发布答案。@atsang01如果您在这方面需要帮助,请告诉我(在这种情况下,用新数据更新帖子会更好)@akrun U r super!!这太棒了…现在我可以通过节省大量时间来更新数据。再次感谢!
library(data.table)
rbindlist(list(OldData, NewData))[!duplicated(Month, fromLast=TRUE)]
rbindlist(list(OldData, NewData))[,if(.N >1) .SD[.N] else .SD, Month]