r - R 中的合并表

标签 r dplyr

我正在尝试合并 R 中的两个 data.frame,以便 test_1 中的值(如果 test_2 中存在)会被覆盖

每次我尝试加入/合并它们时,我都会得到一堆 NA。

我无法为 if.na 制定一个简单的逻辑,然后使用 test_2。这是我需要做的,还是有更简单的方法?

test_1 = structure(list(rn = c("Red", "Blue", 
                      "Green", "Yellow", "Pink", "Gold"
), X2022.08.01 = c(0, 0, 0, 0, 0, 0), X2022.08.02 = c(0, 0, 0, 
                                                      0, 0, 0), X2022.08.03 = c(0, 0, 0, 0, 0, 0), X2022.08.04 = c(0, 
                                                                                                                   0, 0, 0, 0, 0), X2022.08.05 = c(0, 0, 0, 0, 0, 0), X2022.08.08 = c(0, 
                                                                                                                                                                                      0, 0, 0, 0, 0), X2022.08.09 = c(0, 0, 0, 0, 0, 0), X2022.08.10 = c(0, 
                                                                                                                                                                                                                                                         0, 0, 0, 0, 0), X2022.08.11 = c(0, 0, 0, 0, 0, 0), X2022.08.12 = c(0, 
                                                                                                                                                                                                                                                                                                                            0, 0, 0, 0, 0), X2022.08.15 = c(0, 0, 0, 0, 0, 0), X2022.08.16 = c(0, 
                                                                                                                                                                                                                                                                                                                                                                                               0, 0, 0, 0, 0), X2022.08.17 = c(0, 0, 0, 0, 0, 0), X2022.08.18 = c(0, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  0, 0, 0, 0, 0), X2022.08.19 = c(0, 0, 0, 0, 0, 0), X2022.08.22 = c(0, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     0, 0, 0, 0, 0), X2022.08.23 = c(0, 0, 0, 0, 0, 0), X2022.08.24 = c(0, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        0, 0, 0, 0, 0), X2022.08.25 = c(0, 0, 0, 0, 0, 0), X2022.08.26 = c(0, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           0, 0, 0, 0, 0), X2022.08.29 = c(0, 0, 0, 0, 0, 0), X2022.08.30 = c(0, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              0, 0, 0, 0, 0), X2022.08.31 = c(0, 0, 0, 0, 0, 0)), row.names = c(NA, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                6L), class = "data.frame")



test_2 = structure(list(rn = c("Blue", "Pink", 
                               "Red", "Yellow", "Green", "Gold"
), X2022.08.01 = c(10, 10, 10, 10, 10, 10), X2022.08.03 = c(10, 10, 10, 
                                                      10, 10, 10), X2022.08.04 = c(10, 10, 10, 10, 10, 10), X2022.08.05 = c(10, 
                                                                                                                   10, 10, 10, 10, 10), X2022.08.26 = c(10, 10, 10, 10, 10, 10)), row.names = c(NA, 
                                                                                                                                                                                     6L), class = "data.frame")

所需的输出如下所示:




test_output = structure(list(rn = c("Red", "Blue", 
                                             "Green", "Yellow", "Pink", "Gold"
), X2022.08.01 = c(10, 10, 10, 10, 10, 10), X2022.08.02 = c(0, 0, 0, 
                                                      0, 0, 0), X2022.08.03 = c(10, 10, 10, 10, 10, 10), X2022.08.04 = c(10, 
                                                                                                                   10, 10, 10, 10, 10), X2022.08.05 = c(10, 10, 10, 10, 10, 10), X2022.08.08 = c(0, 
                                                                                                                                                                                      0, 0, 0, 0, 0), X2022.08.09 = c(0, 0, 0, 0, 0, 0), X2022.08.10 = c(0, 
                                                                                                                                                                                                                                                         0, 0, 0, 0, 0), X2022.08.11 = c(0, 0, 0, 0, 0, 0), X2022.08.12 = c(0, 
                                                                                                                                                                                                                                                                                                                            0, 0, 0, 0, 0), X2022.08.15 = c(0, 0, 0, 0, 0, 0), X2022.08.16 = c(0, 
                                                                                                                                                                                                                                                                                                                                                                                               0, 0, 0, 0, 0), X2022.08.17 = c(0, 0, 0, 0, 0, 0), X2022.08.18 = c(0, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  0, 0, 0, 0, 0), X2022.08.19 = c(0, 0, 0, 0, 0, 0), X2022.08.22 = c(0, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     0, 0, 0, 0, 0), X2022.08.23 = c(0, 0, 0, 0, 0, 0), X2022.08.24 = c(0, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        0, 0, 0, 0, 0), X2022.08.25 = c(0, 0, 0, 0, 0, 0), X2022.08.26 = c(10, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           10, 10, 10, 10, 10), X2022.08.29 = c(0, 0, 0, 0, 0, 0), X2022.08.30 = c(0, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              0, 0, 0, 0, 0), X2022.08.31 = c(0, 0, 0, 0, 0, 0)), row.names = c(NA, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                6L), class = "data.frame")


最佳答案

如果您使用源的列名作为赋值两侧的索引,则可以替换为

test_1[ ,colnames(test_2)] <- test_2[ , colnames(test_2)]
test_1
      rn X2022.08.01 X2022.08.02 X2022.08.03 X2022.08.04 X2022.08.05 X2022.08.08 X2022.08.09
1   Blue          10           0          10          10          10           0           0
2   Pink          10           0          10          10          10           0           0
3    Red          10           0          10          10          10           0           0
4 Yellow          10           0          10          10          10           0           0
5  Green          10           0          10          10          10           0           0
6   Gold          10           0          10          10          10           0           0
  X2022.08.10 X2022.08.11 X2022.08.12 X2022.08.15 X2022.08.16 X2022.08.17 X2022.08.18 X2022.08.19
1           0           0           0           0           0           0           0           0
2           0           0           0           0           0           0           0           0
3           0           0           0           0           0           0           0           0
4           0           0           0           0           0           0           0           0
5           0           0           0           0           0           0           0           0
6           0           0           0           0           0           0           0           0
  X2022.08.22 X2022.08.23 X2022.08.24 X2022.08.25 X2022.08.26 X2022.08.29 X2022.08.30 X2022.08.31
1           0           0           0           0          10           0           0           0
2           0           0           0           0          10           0           0           0
3           0           0           0           0          10           0           0           0
4           0           0           0           0          10           0           0           0
5           0           0           0           0          10           0           0           0
6           0           0           0           0          10           0           0           0

我怀疑是否存在更简单的方法。只要索引位于目标矩阵或数据帧的列名和行名的正确子集,它甚至可以使用更有限的行数。注意:我不明白 NA 的问题。两种结构中都没有 NA。

关于r - R 中的合并表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74175715/

相关文章:

R:将宽格式转换为具有多个 3 个时间段变量的长格式

R基于两个变量的累积和

rbind 不同类别的数据集

r - 更改 ggplot2 中刻度的位置(在绘图内)

r - 比较两个列表 [R]

r - 如何在 [R] 中自动添加图例?

r - 使用 r 中的 dplyr 将函数应用于每个组的数据帧

r - R 中带有 group_by 的多个条件语句?

r - 使用 dplyr mutate 改变因子水平

r - dplyr::if_else - 检查条件并插入 NA 作为评估的一部分