我有一个数据框,我试图将其他值替换为某些值。所以,作为一个小例子,我有一个伪数据框:
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;。
上述想法是否是最有效的方法?
答案 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"))