基本上,我有一个数据框,其中有一些数据需要替换为另一个数据框中的数据.一些观察结果只需要在许多列中的几个列中进行更改.

举例来说,假设我有一个数据帧:

df1 <- data.frame(index = c('a', 'b', 'c', 'd', 'e'), 
                  var1 = c(40, 22, 12, 4, 0),
                  var2 = c(75, 55, 65, 15, 0),
                  var3 = c(9, 18, 81, 3, 0),
                  var4 = c(1, 11, 21, 61, 0),
                  var5 = c(-1, -2, -3, -4, 0),
                  var6 = c(0, 1, 0, 1, 0))

    index   var1   var2   var3   var4   var5   var6
1     a     40     75      9      1     -1      0
2     b     22     55     18     11     -2      1
3     c     12     65     81     21     -3      0
4     d      4     15      3     61     -4      1
5.    e      0      0      0     0       0      0

然后,出现了一些关于"b"和"c"观测值的更好数据,但仅限于变量"var2"和"var3":

df2 <- data.frame(index = c('a', 'b', 'c', 'd'), 
                  var1 = c(40, 22, 12, 4),
                  var2 = c(75, 550, 650, 15),
                  var3 = c(9, 180, 810, 3),
                  var4 = c(1, 11, 21, 61))

  index var1 var2 var3 var4
1     a   40   75    9    1
2     b   22  550  180   11
3     c   12  650  810   21
4     d    4   15    3   61

我想要生成的数据帧:


   index var1 var2 var3 var4 var5 var6
1     a   40   75    9    1   -1    0
2     b   22  550  180   11   -2    1
3     c   12  650  810   21   -3    0
4     d    4   15    3   61   -4    1
5     e    0    0    0    0    0    0

有什么建议吗(特别是关于offfer的tidyverse解决方案?)我玩过mutateacrossreplace,但似乎都没玩到.

Clarification:我希望var2和var3的新值替换为来自df2的值,只要索引值在df1中找到.其他一切都应该保持不变.我正在处理的数据集多次显示索引值.我try 了以下方法,但语法有问题:

df1 %>%
    mutate(across(c(var2, var3),
           ~if_else(index %in% df2$index),
                     .[df2$index],
                     .))

推荐答案

更新二:新的澄清后:删除之前的答案:

library(dplyr)

bind_rows(df1, df2) %>% 
  arrange(index) %>% 
  mutate(across(var1:var4, ~ifelse(index=="b" |
                                     index == "c", lead(.), .))) %>% 
  na.omit()
  index var1 var2 var3 var4 var5 var6
1     a   40   75    9    1   -1    0
3     b   22  550  180   11   -2    1
5     c   12  650  810   21   -3    0
7     d    4   15    3   61   -4    1
9     e    0    0    0    0    0    0

R相关问答推荐

替换字符的所有实例,但仅限于匹配字符串中

如何将多个数据帧附加到R中的多个相应的CSV文件中?

过滤Expand.Grid的结果

如何将y轴上的线定位得彼此更近

在垂直轴中包含多个ggplot2图中的平均值

手动打印线型gplot

如何在编辑列时更新可编辑数据表,并使用该表在Shiny中执行连续计算

在for循环中转换rabrame

当月份额减go 当月份额

使用R中的正则表达式将一列分割为多列

plotly hover文本/工具提示在shiny 中不起作用

如何将R中数据帧中的任何Nas替换为最后4个值

SHINY:使用JS函数应用的CSS样式显示HTML表格

从多个线性回归模型中提取系数

如何识别倒排的行并在R中删除它们?

将多个列值转换为二进制

如何将一个方阵分解成没有循环的立方体

我是否可以使用多个变异项来构建顺序列(标记多个问题)

根据r中每行中的日期序列,使用列名序列创建新列

使用geom_sf跨越日期线时的闭合边界