R如何用另一个数据帧的值替换值?

R如何用另一个数据帧的值替换值?,r,dataframe,replace,R,Dataframe,Replace,我有一个巨大的数据框df,其中包含列“a”中的数字。我还有一个数据框名称,其中包含与这些数字对应的名称 df: a b c name: 1 val1 val2 1 cat 1 val1 val2 2 dog 2 val1 val2 3 rabbit 3 val

我有一个巨大的数据框df,其中包含列“a”中的数字。我还有一个数据框名称,其中包含与这些数字对应的名称

df:                          
 a   b     c                   name:
 1   val1  val2                  1  cat
 1   val1  val2                  2  dog
 2   val1  val2                  3  rabbit
 3   val1  val2
 3   val1  val2
 3   val1  val2
现在我想用名字替换数字。新的数据帧应如下所示:

df:                                      
   a        b     c      
   cat      val1  val2                  
   cat      val1  val2                  
   dog      val1  val2                  
   rabbit   val1  val2
   rabbit   val1  val2
   rabbit   val1  val2
我意识到了这一点。它工作,但我不满足,因为我硬编码的名称

  df$a<-replace(df$a, df$a==1, "cat" )
  df$a<-replace(df$a, df$a==2, "dog" )
  df$a<-replace(df$a, df$a==3, "rabbit" )
df$a数据:

将值替换为字符:

df$a = c('cat', 'dog', 'rabbit')[ match(df$a, sort(unique(df$a))) ]
输出

df
#       a    b    c
#1    cat val1 val2
#2    cat val1 val2
#3    dog val1 val2
#4 rabbit val1 val2
#5 rabbit val1 val2
#6 rabbit val1 val2
样本数据:

df = data.frame(a = c(1,1,2,3,3,3), b = rep('val1', 6), c = rep('val2', 6))
df

#   a    b    c
# 1 1 val1 val2
# 2 1 val1 val2
# 3 2 val1 val2
# 4 3 val1 val2
# 5 3 val1 val2
# 6 3 val1 val2
使用
dplyr
recode()

df %>% mutate(a = recode(a, '1' = 'cat', '2' = 'dog', '3' = 'rabbit'))

#        a    b    c
# 1    cat val1 val2
# 2    cat val1 val2
# 3    dog val1 val2
# 4 rabbit val1 val2
# 5 rabbit val1 val2
# 6 rabbit val1 val2

这是合并两个data.frames。这不需要硬编码任何值,只需要向data.frames添加新值

df <- data.frame(a = c(1,1,2,3,3,3), b = "val1", c = "val2")
df.name <- data.frame(a = 1:3, name=c("cat", "dog", "rabbit"))

df1 <- merge(df, df.name, by = "a")  # merge two data.frames by `a`

只是一个提示:你可以看看一些连接函数。在
dplyr
或``data.table`中,例如.df$a,非常感谢您的帮助:-)此解决方案隐式假设将“cat”替换为df$a的最小值(一旦排序)。有可能有对吗,例如c(1,'猫')这表示要用什么值替换什么值?在这种情况下,您必须按照@ManotheSharek解决方案中的方法按索引合并数据,如果您的数据集很大,则将data.frame替换为data.table,然后执行merging。此解决方案的困难在于替换必须手动键入“1”=“cat”等等。是否可能有两个列表,一个表示要替换的内容,另一个表示要替换的内容?
df <- data.frame(a = c(1,1,2,3,3,3), b = "val1", c = "val2")
df.name <- data.frame(a = 1:3, name=c("cat", "dog", "rabbit"))

df1 <- merge(df, df.name, by = "a")  # merge two data.frames by `a`
df1$a <- df1$name
df1$name <- NULL

       a    b    c
1    cat val1 val2
2    cat val1 val2
3    dog val1 val2
4 rabbit val1 val2
5 rabbit val1 val2
6 rabbit val1 val2