我试图找到一种快速的方法来替换数据帧的几列中的值(字符串)。
id = c(2, 3, 5)
v1 = c("aa", "bb", "cc")
v2 = c("ee", "aa", "cc")
df = data.frame(id,v1,v2)
print(df)
id v1 v2
1 2 aa ee
2 3 bb aa
3 5 cc cc
我想要的是替换" aa"的所有实例。 by" uu"和" cc"通过" rr"
id v1 v2
1 2 uu ee
2 3 bb uu
3 5 rr rr
答案 0 :(得分:1)
以下是使用lapply
的基本R选项:
fun <- function(x) {
x[x == "aa"] <- "uu"
x[x == "cc"] <- "rr"
return(x)
}
df <- data.frame(lapply(df, fun))
答案 1 :(得分:1)
您可以使用str_replace_all
包
{stringr}
library(purrr)
library(stringr)
df %>%
map_df(~str_replace_all(., c("aa" = "uu", "cc" = "rr")))
答案 2 :(得分:0)
library(plyr)
df[c("v1", "v2")] <-lapply(df[c("v1", "v2")], function(x) mapvalues( x, c("aa", "cc"), c("uu", "rr")))
答案 3 :(得分:0)
这可能对您有用:
library(car)
df[,2:3] <- lapply(df[,2:3], function(x) recode(x, "'aa' = 'uu'; 'cc' = 'rr'"))
答案 4 :(得分:0)
df %>% mutate_if(is.character, funs(case_when( . == 'aa' ~ 'uu'
, . == 'cc' ~ 'rr'
, T ~ .)))
如果列是你可以做的因素
df %>% mutate_if(is.factor, funs(case_when( . == 'aa' ~ 'uu'
, . == 'cc' ~ 'rr'
, T ~ as.character(.))))
答案 5 :(得分:0)
首先,我们构建替换值的查找:
lkp = list(aa = 'uu', cc = 'rr')
然后我们可以直接在dplyr::recode
中使用它,通过do.call
:
library(dplyr)
df %>% mutate_at(vars(v1,v2),funs(do.call(recode,c(.x=list(.),lkp))))
# id v1 v2
# 1 2 uu ee
# 2 3 bb uu
# 3 5 rr rr
答案 6 :(得分:0)
使用Replace all 0 values to NA
的答案,您可以使用[]
对df
进行分组,以找到感兴趣的值,并将其替换为首选值。
# create data
id <- c(2, 3, 5)
v1 <- c("aa", "bb", "cc")
v2 <- c("ee", "aa", "cc")
df <- data.frame( id, v1, v2, stringsAsFactors = FALSE )
# view the data
df
# id v1 v2
# 1 2 aa ee
# 2 3 bb aa
# 3 5 cc cc
# find all instances of "aa"
# and replace with "uu"
df[ df == "aa" ] <- "uu"
# find all instances of "cc"
# and replace with "rr"
df[ df == "cc" ] <- "rr"
# view the data
df
# id v1 v2
# 1 2 uu ee
# 2 3 bb uu
# 3 5 rr rr
# end of script #