Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:用相应的值替换列中的值_R_Dataframe_Replace - Fatal编程技术网

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

当值满足R中的某些条件时,如何替换列中的值

这里我有两个数据帧

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