根据另一个数据框的列值替换两个数据框列的值

时间:2019-01-15 21:25:04

标签: r

我有以下两个数据框:

Names<-c("Max","Helen","Bob","Eva")
Id<-c(1,2,3,4)
LISTN<-data.frame(Names,Id)

Name1<-c("Max","Bob")
Name2<-c("Helen","Eva")
PAIRS<-data.frame(Name1,Name2)

我想用Name1中相应的Name2替换PAIRS的列IdLISTN的值。结果应如下所示:

Name1 Name2
1     1     2
2     3     4

2 个答案:

答案 0 :(得分:3)

我可以想到使用match的两种方法,> sapply(PAIRS, match, LISTN$Names) # returns matrix Name1 Name2 [1,] 1 2 [2,] 3 4 > as.data.frame(lapply(PAIRS, match, LISTN$Names)) # returns dataframe Name1 Name2 1 1 2 2 3 4 是用于将有序值转换为索引位置的函数:

required

如果尚未按顺序对名称进行排序,则需要先解决该问题。

答案 1 :(得分:1)

使用tidyverse,您可以执行以下操作:

PAIRS %>%
 rowid_to_column() %>%
 gather(var, val, -rowid) %>%
 left_join(LISTN, by = c("val" = "Names")) %>%
 select(-val) %>%
 spread(var, Id) %>%
 select(-rowid)

  Name1 Name2
1     1     2
2     3     4

它正在将PAIRS df从宽格式转换为长格式,将其与名称上的LISTN df合并,然后使用“ Id”中的值将其转换回宽格式。