R语言 将来自两个与行名匹配的数据框的数据求和

flvtvl50  于 2023-03-27  发布在  其他
关注(0)|答案(2)|浏览(79)

我有两个行数不同的 Dataframe ,因此:

df1:
           Data1
2019-03-01 0.011
2019-04-01 0.021
2019-05-01 0.013
2019-06-01 0.032
2019-07-01 NA

df2:
           Data2
2019-01-01 0.012
2019-02-01 0.024
2019-03-01 0.033
2019-04-01 0.017
2019-05-01 0.055
2019-06-01 0.032
2019-07-01 0.029

行名称是日期。我想向df1添加第二列"Result"。此列将df1$Data1中的值+df2$Data2中具有相同行名称的行中的值相加。(两个数据框中的行名称是唯一的,并且是有序的。)因此,例如:

df1$Result[1] <- df1$Data1[1] + df2$Data2[3]

结果将是:

df1:
           Data1 Result
2019-03-01 0.011 0.044
2019-04-01 0.021 0.038
2019-05-01 0.013 0.068
2019-06-01 0.032 0.064
2019-07-01 NA    NA

我能想到的唯一方法就是使用循环结构,但我认为有更好的方法。但是我没有找到它,所以我想我在寻找错误的东西。有什么想法吗?
我也愿意接受其他建议来达到同样的目的。因此,例如,如果用数据列中的日期而不是行名称中的日期来实现这一点会更容易,那就很好。或者如果用ts对象来实现这一点会更容易,尽管我通常发现数据框更容易使用。

s2j5cfk0

s2j5cfk01#

您可以按行名merge两个 Dataframe ,然后添加相应的列

transform(merge(df1, df2, by = 0), sum = Data1 + Data2)

#   Row.names Data1 Data2   sum
#1 2019-03-01 0.011 0.033 0.044
#2 2019-04-01 0.021 0.017 0.038
#3 2019-05-01 0.013 0.055 0.068
#4 2019-06-01 0.032 0.032 0.064
#5 2019-07-01    NA 0.029    NA

或者类似于dplyr

library(dplyr)
library(tibble)

inner_join(df1 %>% rownames_to_column(), 
           df2 %>% rownames_to_column(), by = "rowname") %>%
mutate(Result = Data1 + Data2)
mklgxw1f

mklgxw1f2#

我们可以使用data.table

library(data.table)
setDT(df1, keep.rownames = TRUE)
setDT(df2, keep.rownames = TRUE)
df2[df1, on = .(rn)][, sum := Data1 + Data2][]
#           rn Data2 Data1   sum
#1: 2019-03-01 0.033 0.011 0.044
#2: 2019-04-01 0.017 0.021 0.038
#3: 2019-05-01 0.055 0.013 0.068
#4: 2019-06-01 0.032 0.032 0.064
#5: 2019-07-01 0.029    NA    NA

相关问题