R如何用另一个数据帧的值替换值?
我有一个巨大的数据框df,其中包含列“a”中的数字。我还有一个数据框名称,其中包含与这些数字对应的名称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 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