我有以下两个数据框:
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
的列Id
和LISTN
的值。结果应如下所示:
Name1 Name2
1 1 2
2 3 4
答案 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”中的值将其转换回宽格式。