替换R中数据框中的多个值

时间:2018-08-22 17:14:19

标签: r

我想在一次调用中重新分配具有相同值的多个不同字符串。但是,以下代码仅替换每个变量中的 some 值。


dat <-data.frame(x=c(rep("1=x",4),rep("b",4)),y=c(rep("1=z",4),rep("b",4)))
dat[] <- sapply(dat[], as.character)
dat[dat == c("1=x", "1=y")]<- 1

我得到:

dat  
x   y
1   1 1=z
2 1=x 1=z
3   1 1=z
4 1=x 1=z
5   b   b
6   b   b
7   b   b
8   b   b

以下是我想要的:

dat  
x   y
1   1   1
2   1   1
3   1   1
4   1   1
5   b   b
6   b   b
7   b   b
8   b   b

2 个答案:

答案 0 :(得分:1)

使用dplyr

library(dplyr)

dat <- mutate_all(dat, funs(replace(., grepl("1=", .), 1)))

使用基本R:

dat[] <- lapply(dat, function(x) replace(x, grepl("1=", x), 1))

结果:

  x y
1 1 1
2 1 1
3 1 1
4 1 1
5 b b
6 b b
7 b b
8 b b

数据:

dat <- structure(list(x = c("1=x", "1=x", "1=x", "1=x", "b", "b", "b", 
"b"), y = c("1=z", "1=z", "1=z", "1=z", "b", "b", "b", "b")), .Names = c("x", 
"y"), row.names = c(NA, -8L), class = "data.frame")

答案 1 :(得分:0)

如果要显式替换某些字符串,另一个Base R选项是:

dat[] <- lapply(dat,function(x) ifelse(x %in% c("1=x", "1=z"), 1, x))

结果:

  x y
  1 1 1
  2 1 1
  3 1 1
  4 1 1
  5 b b
  6 b b
  7 b b
  8 b b

数据:

dat <- structure(list(x = c("1", "1", "1", "1", "b", "b", "b", "b"), 
y = c("1", "1", "1", "1", "b", "b", "b", "b")), row.names = c(NA, 
-8L), class = "data.frame")