根据 R 中的另一个数据框转换列的值

convert values of a column based on another dataframe in R

我有一个data.frame

df1=data.frame(f=LETTERS[1:4],v=c(1:4))
  f v
1 A 1
2 B 2
3 C 3
4 D 4

第一列是因子列表,其中我有另一个包含这些值的数据框,它们也是因子

df2=data.frame(f=LETTERS[1:7],f2=letters[26:20])
  f f2
1 A  z
2 B  y
3 C  x
4 D  w
5 E  v
6 F  u

我想知道如何编写一个函数,以便我可以将 df1 第一列的值更改为它们从 df2 映射到的值。我想得到:

  f v
1 z 1
2 y 2
3 x 3
4 w 4

我尝试了 for 循环但没有成功。非常感谢 Ant 的建议

注意:这是我工作的一个简化示例。合并会添加太多无法使用的列,我认为额外的内存存储不会很有用

library(dplyr)
left_join(df1,df2)

我们可以使用match

 df1$f <- df2$f2[match(df1$f, df2$f)]
 df1
 #  f v
 #1 z 1
 #2 y 2
 #3 x 3
 #4 w 4

您可以使用merge

merge(df1,df2,by = "f")[,c(1,3,2)]
  f f2 v
1 A  z 1
2 B  y 2
3 C  x 3
4 D  w 4

您可以尝试使用 merge 函数合并两个表,然后指定要保留的列。

例如:

df1 <- data.frame(f=LETTERS[1:4],v=c(1:4))
df2 <- data.frame(f=LETTERS[1:7],f2=letters[26:20])

merge(df1, df2, by.x = "f")[,c("f2", "v")]

  f2 v
1  z 1
2  y 2
3  x 3
4  w 4