用另一个字符串替换字符串

Replacing character string with another character string

我有一个数据框,我试图用其他值替换其中的某些值。所以,作为一个小例子,我有一个虚拟数据框:

dummy<-c("1","2","3","4")
dummy<-data.frame(dummy)
dummy$dummy<-as.character(dummy$dummy)

odd<-c("1","3")

replace(dummy$dummy, dummy$dummy==odd, "odd")

#> [1] "odd" "2"   "3"   "4" 

为什么这只会将“1”替换为 "odd" 而不是“3”?

我的实际数据集有更多信息(它是餐厅菜系类型,我需要用更通用的类别替换菜系类型。例如,我有菜系类型 "Italian" 和 "French" 在我的数据集中需要替换为 "European",而美食类型 "Southwestern" 和 "Pacific Northwestern" 需要替换为 "American"。

上面的想法是最有效的方法吗?

也喜欢epi99 suggested, you can use stringr::str_replace() for this. You might also want to look over their guide to using Regular Expressions

library(dplyr)
library(stringr)

df <- data_frame(dummy = c("1","2","3","4"))

df %>% mutate(dummy = str_replace(dummy, "1|3", "odd"))

#> # A tibble: 4 x 1
#>   dummy
#>   <chr>
#> 1   odd
#> 2     2
#> 3   odd
#> 4     4

听起来你的替换是一个实际变量;如果是这样,您可以用 ifelse 语句替换如下:

df <- data.frame(dummy = c("1","2","3","4"))
df$dummy <- ifelse(df$dummy %in% c(1,3), "Odd", df$dummy)
df

  dummy
1   Odd
2     2
3   Odd
4     4

我们可以在 base R

levels(df$dummy)[levels(df$dummy) %in% c(1, 3)] <- "odd"
df
#  dummy
#1   odd
#2     2
#3   odd
#4     4

数据

df <- data.frame(dummy = c("1","2","3","4"))