Match values in data frame with values in another data frame and replace former with a corresponding pattern from the other data frame

夙愿已清 提交于 2019-11-26 04:25:04

问题


Complicated title but here is a simple example of what I am trying to achieve:

d <- data.frame(v1 = c(1,2,3,4,5,6,7,8), 
                v2 = c(\"A\",\"E\",\"C\",\"B\",\"B\",\"C\",\"A\",\"E\"))

m <- data.frame(v3 = c(\"D\",\"E\",\"A\",\"C\",\"D\",\"B\"), 
                v4 = c(\"d\",\"e\",\"a\",\"c\",\"d\",\"b\"))

Values in d$v2 should be replaced by values in m$v4 by matching the values from d$v2 in m$v3

The resulting data frame d should look like:

v1    v4
1      a
2      e
3      c
4      b
5      b
6      c
7      a
8      e

I tried different stuff and the closest I came was: d$v2 <- m$v4[which(m$v3 %in% d$v2)]

I try to avoid any for-loops again! Must be possible :-) somehow... ;)


回答1:


You could try:

merge(d,m, by.x="v2", by.y="v3")
  v2 v1 v4
1  A  1  a
2  A  7  a
3  B  4  b
4  B  5  b
5  C  3  c
6  C  6  c
7  E  2  e
8  E  8  e

Edit

Here is another approach, to preserve the order:

data.frame(v1=d$v1, v4=m[match(d$v2, m$v3), 2])
  v1 v4
1  1  a
2  2  e
3  3  c
4  4  b
5  5  b
6  6  c
7  7  a
8  8  e



回答2:


You could use a standard left join.

Loading the data:

d <- data.frame(v1 = c(1,2,3,4,5,6,7,8), v2 = c("A","E","C","B","B","C","A","E"), stringsAsFactors=F)
m <- data.frame(v3 = c("D","E","A","C","D","B"), v4 = c("d","e","a","c","d","b"), stringsAsFactors=F)

Changing column name, such that I can join by column "v2"

colnames(m) <- c("v2", "v4")

Left joining and maintaining the order of data.frame d

library(dplyr)
left_join(d, m)

Output:

  v1 v2 v4
1  1  A  a
2  2  E  e
3  3  C  c
4  4  B  b
5  5  B  b
6  6  C  c
7  7  A  a
8  8  E  e



回答3:


This will give you the desired output:

d$v2 <- m$v4[match(d$v2, m$v3)]

match function returns the position from m matrix's v3 column for the values in d$v2 being matched. Once you have obtained the indices (from using match()), access elements from m$v4 using those indices to replace the elements in d matrix, column v2.



来源:https://stackoverflow.com/questions/11530184/match-values-in-data-frame-with-values-in-another-data-frame-and-replace-former

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!