合并R数据帧中的行时的冲突解决方案

时间:2014-09-02 11:17:45

标签: r merge dataframe rows

我有一个包含宏观经济数据系列的数据框,这些数据系列分为两个不同的行,但是在一些共同的时间点上重叠。

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函数允许合并数据框中的两行,同时保留属于这些行中任何一行的所有值,以防发生冲突?

提前感谢您的帮助!

2 个答案:

答案 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值,则需要稍微多做一些工作。

编辑:正如Ananda指出的那样,你需要将这些行包装成一个循环,依次选择每个国家名称并提取所需的行。