首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R不使用合并的情况下比较两个数据帧

R不使用合并的情况下比较两个数据帧
EN

Stack Overflow用户
提问于 2020-08-18 15:01:49
回答 1查看 40关注 0票数 0

我想比较两个列结构相同的数据帧(列数和列名)。如果数据帧X的A列的单元格中的值与数据帧Y的A列的单元格中的值匹配,则数据帧X的B和C列的单元格(同一行)中的值将更改为数据帧Y的B和C列的单元格中的值。

数据

代码语言:javascript
运行
复制
df_X <- structure(list(A = c("Apple", "Banana", "Orange", "Banana"), 
    B = c(1L, 2L, 3L, 2L), C = c(2L, 2L, 3L, 1L), D = c(2L, 2L, 
    3L, 5L)), class = "data.frame", row.names = c(NA, -4L))

df_Y <- structure(list(A = c("Apple", "Banana."), B = c(4L, 2L), C = c(3L, 
3L), D = c(2L, 4L)), class = "data.frame", row.names = c(NA, 
-2L))

Data Frame X
A          B  C  D
Apple      1  2  2
Banana     2  2  2
Orange     3  3  3
Banana     2  1  5

Data Frame Y
A         B  C  D
Apple     4  3  2
Banana.   2  3  4

在匹配之后,数据帧x将变成:

代码语言:javascript
运行
复制
Data Frame X
A          B  C  D
Apple      4  3  2
Banana     2  3  2
Orange     3  3  3
Banana     2  3  5

我知道合并这两个数据帧-- cab --可能会起作用。但是,我想知道不使用merge/left_join() (在dplyr中)就能完成任务吗?因为我的数据框架真的很长(很多列),我最终想要一个独立的数据框架X。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-18 15:07:51

您可以使用match覆盖x中的匹配行和y

代码语言:javascript
运行
复制
i <- match(x$A, y$A)
j <- !is.na(i)
x[j,c("B","C")] <- y[i[j],c("B","C")]
#       A B C D
#1  Apple 4 3 2
#2 Banana 2 3 2
#3 Orange 3 3 3
#4 Banana 2 3 5

数据:

代码语言:javascript
运行
复制
x <- read.table(header=TRUE, text="
A          B  C  D
Apple      1  2  2
Banana     2  2  2
Orange     3  3  3
Banana     2  1  5")
y <- read.table(header=TRUE, text="
A         B  C  D
Apple     4  3  2
Banana    2  3  4")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63471417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档