R:用相应的值替换列中的值
当值满足R中的某些条件时,如何替换列中的值 这里我有两个数据帧R:用相应的值替换列中的值,r,dataframe,replace,R,Dataframe,Replace,当值满足R中的某些条件时,如何替换列中的值 这里我有两个数据帧 Fruits <- c("Apple", "Grape Fruits", "Lemon", "Peach", "Banana", "Orange", "Strawberry", "Apple") df1 <- data.frame(Fruits) df1 Fruits Apple Grape Fruits Lemon
Fruits <- c("Apple", "Grape Fruits", "Lemon", "Peach", "Banana", "Orange", "Strawberry", "Apple")
df1 <- data.frame(Fruits)
df1
Fruits
Apple
Grape Fruits
Lemon
Peach
Banana
Orange
Strawberry
Apple
Name <- c("Apple", "Orange", "Lemon", "Grape", "Peach","Pinapple")
Rename <- c("Manzana", "Naranja", "Limon", "Uva", "Melocoton", "Anana")
df2 <- data.frame(Name, Rename)
df2
Name Rename
Apple Manzana
Orange Naranja
Lemon Limon
Grape Uva
Peach Melocoton
Pinapple Anana
有人知道怎么做吗?非常感谢您的帮助。您可以使用
合并
,然后用各自的结果替换所有NA
df3 <- merge(df1,df2, by.x = "Fruits", by.y = "Name", all.x = T)
df3$Rename[is.na(df3$Rename)] <- df3$Fruits[is.na(df3$Rename)]
使用plyr
library(plyr)
new.fruits <- mapvalues(Fruits, from = Name, to = Rename)
df <- data.frame(Fruits=new.fruits)
库(plyr)
使用apply
和pmatch
可以提供所需的输出
df1$Fruits <- apply(df1,1,function(x){
matched = (df2$Name == x)
if(any(matched)){
as.character(df2$Rename[matched])
} else {
x
}})
df1
# Fruits
# 1 Manzana
# 2 Grape Fruits
# 3 Limon
# 4 Melocoton
# 5 Banana
# 6 Naranja
# 7 Strawberry
# 8 Manzana
df1$Fruits您尝试过合并吗?这将更改df1的顺序,而不是使用match合并df1$new=df2$Rename[match(df1$Fruits,df2$Name)]
是的,它将更改顺序,但如果需要,我们可以解决这个问题。添加了额外的部分以保持顺序谢谢,但我不希望部分匹配,我希望仅当值完全匹配时才替换这些值。@GabrielMacotti然后不要使用pmatch
。只需使用=
运算符。我已经更新了答案。
df1$new=df2$Rename[match(df1$Fruits,df2$Name)]
df1$new[is.na(df1$new)] <- df1$Fruits[is.na(df1$new)]
library(plyr)
new.fruits <- mapvalues(Fruits, from = Name, to = Rename)
df <- data.frame(Fruits=new.fruits)
df1$Fruits <- apply(df1,1,function(x){
matched = (df2$Name == x)
if(any(matched)){
as.character(df2$Rename[matched])
} else {
x
}})
df1
# Fruits
# 1 Manzana
# 2 Grape Fruits
# 3 Limon
# 4 Melocoton
# 5 Banana
# 6 Naranja
# 7 Strawberry
# 8 Manzana