用另一个字符串

时间:2017-06-03 19:14:04

标签: r gsub

我有一个数据框,我试图将其他值替换为某些值。所以,作为一个小例子,我有一个伪数据框:

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" 

为什么这只会取代&#34; 1&#34;用&#34;奇数&#34;而不是&#34; 3&#34;?

我的实际数据集中有更多信息(这是餐馆美食类型,我需要用更一般的类别替换菜肴类型。例如,我有美食类型&#34;意大利&#34;和& #34;法语&#34;在我的数据集中需要替换为&#34;欧洲&#34;和美食类型&#34;西南&#34;和#34;太平洋西北&#34;需要取而代之的是&#34; American&#34;。

上述想法是否是最有效的方法?

3 个答案:

答案 0 :(得分:2)

与建议epi99一样,您可以使用stringr::str_replace()。您可能还希望查看使用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

答案 1 :(得分:0)

听起来你的替代品是一个实际变量;如果是这样,您可以使用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

答案 2 :(得分:0)

我们可以在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"))