我有一个包含宏观经济数据系列的数据框,这些数据系列分为两个不同的行,但是在一些共同的时间点上重叠。
Country Series T1 T2 T3 T4 T5 T6 T7 T8 ...
Japan Series1 10 20 10 30 40 NA NA NA ...
Japan Series2 NA NA NA 35 40 30 30 20 ...
Korea Series1 70 80 70 70 80 NA NA NA ...
Korea Series2 NA NA NA 70 85 80 75 70 ...
我想将这些行合并为一个,但由于原因太复杂,第二个系列有时会包含重叠时间点的不同值。我想在合并行时保留这些值(并相应地丢弃第一个系列的值)。
Country Series T1 T2 T3 T4 T5 T6 T7 T8 ...
Japan SeriesA 10 20 10 35 40 30 30 20 ...
Korea SeriesA 70 80 70 70 85 80 75 70 ...
是否存在一些R函数允许合并数据框中的两行,同时保留属于这些行中任何一行的所有值,以防发生冲突?
提前感谢您的帮助!
答案 0 :(得分:6)
这是一个使用“zoo”中的na.locf
的想法:
library(zoo)
na.locf(mydf)[grep("Series2", mydf$Series), ]
# Country Series T1 T2 T3 T4 T5 T6 T7 T8
# 2 Japan Series2 10 20 10 35 40 30 30 20
# 4 Korea Series2 70 80 70 70 85 80 75 70
答案 1 :(得分:4)
当两个系列不同时,您似乎总是希望删除NA
这是正确的吗?
如果是这样,这是一个简单的方法。
newseries<- series2
newseries[is.na(newseries)]<-series1[is.na(newseries)]
我故意创建了newseries
,以免修改输入向量。请注意,这总是选择series2
值,除非值为NA
。如果您发现需要更复杂的方法来选择series2
值超过series1
值,则需要稍微多做一些工作。