我想比较两个列结构相同的数据帧(列数和列名)。如果数据帧X的A列的单元格中的值与数据帧Y的A列的单元格中的值匹配,则数据帧X的B和C列的单元格(同一行)中的值将更改为数据帧Y的B和C列的单元格中的值。
数据
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将变成:
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。谢谢!
发布于 2020-08-18 15:07:51
您可以使用match覆盖x中的匹配行和y。
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数据:
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")https://stackoverflow.com/questions/63471417
复制相似问题