如何更改数据框中的值

时间:2018-02-07 13:47:52

标签: r dataframe

我试图找到一种快速的方法来替换数据帧的几列中的值(字符串)。

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

7 个答案:

答案 0 :(得分:1)

以下是使用lapply的基本R选项:

fun <- function(x) {
    x[x == "aa"] <- "uu"
    x[x == "cc"] <- "rr"
    return(x)
}
df <- data.frame(lapply(df, fun))

Demo

答案 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 #