r - 如何将一个数据框中的行替换为另一个数据框中所有列的匹配行
问题描述
我想用来自另一个数据帧的匹配行替换一个数据帧中的一整行数据。我有一个只有几列的可重现示例,但实际上我有一个包含几十列的数据框。
# main dataframe
df1 <- tibble(id = letters[1:5], v1 = seq(1,5), v2 = seq(1,5), v3 = seq(1,5))
>df1
# A tibble: 5 x 4
id v1 v2 v3
<chr> <int> <int> <int>
1 a 1 1 1
2 b 2 2 2
3 c 3 3 3
4 d 4 4 4
5 e 5 5 5
# values to replace
df2 <- tibble(id = letters[3:4], v1 = rep(0,2), v2 = rep(0,2), v3 = rep(0,2))
> df2
# A tibble: 2 x 4
id v1 v2 v3
<chr> <dbl> <dbl> <dbl>
1 c 0 0 0
2 d 0 0 0
# what the final result should look like
result <- tibble(id = c("a", "b", "c", "d", "e"), v1 = c(1, 2, 0, 0, 5), v2 = c(1, 2, 0, 0, 5), v3 = c(1, 2, 0, 0, 5))
>result
# A tibble: 5 x 4
id v1 v2 v3
<chr> <dbl> <dbl> <dbl>
1 a 1 1 1
2 b 2 2 2
3 c 0 0 0
4 d 0 0 0
5 e 5 5 5
解决方案
这是使用的一种解决方案tidyverse
library(tidyverse)
df1 %>%
#Stay with the rows that are not found in df2 according to its id
filter(! id %in% df2$id) %>%
#bind rows of df2
bind_rows(df2) %>%
#Order data according to id values
arrange(id)
推荐阅读
- typescript - Webpack ts-loader`找不到模块:错误:无法解析`
- angular - 无法读取 NgbTypeahead 中未定义的属性“管道”
- python - 从二进制文件读取的不同行为
- python - 使用 pypyodbc 对列名进行 SQL Server 编码
- python - Coco 类型数据集的评估返回错误
- c# - 将 FileSystemWatcher 与具有 FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS 的文件一起使用
- python - Python append 从列表中删除元素
- java - 在java中查找多个日期间隔之间的差异
- vue.js - nuxt 在点击 this.$auth.fetchUser() 后获取用户名
- datatable - 从 SLT 表中删除部分数据