使用 replace 函数替换多个元素

Replacing more than one elements with replace function

mtcars$am 中,我想将 0 的实例替换为零,将 1 的实例替换为一。这是我试过的:

library(dplyr)

mtcars %>%
dplyr::select(am) %>%
mutate(am.character = replace(am, am %in% c(0, 1), c("zero", "one"))) %>%
as.data.frame

   am am.character
1   1         zero
2   1          one
3   1         zero
4   0          one
5   0         zero
6   0          one
7   0         zero
8   0          one
9   0         zero
10  0          one
11  0         zero
12  0          one
13  0         zero
14  0          one
15  0         zero
16  0          one
17  0         zero
18  1          one
19  1         zero
20  1          one
21  0         zero
22  0          one
23  0         zero
24  0          one
25  0         zero
26  1          one
27  1         zero
28  1          one
29  1         zero
30  1          one
31  1         zero
32  1          one

但这一切都创建了一个重复 16 次的 c(0,1) 向量。如何将 0 的实例替换为零,将 1 的实例替换为一?

您可以通过 numeric 索引尝试。

 mtcars %>% 
    select(am) %>% 
    mutate(am1= c('zero', 'one')[am+1L])

或使用replace,但当有多个元素需要替换时,这就没有用了。最好是使用 factor 并指定 levels/labels.

 mtcars %>%
      select(am) %>%
      mutate(am1= replace(replace(am, !am, 'zero'), am==1, 'one') )

或者不是双 replace,而是根据 "am"[=26 的值创建一个 zeroreplacezero' byone` 列=]

 mtcars %>%
     select(am) %>% 
     mutate(am1= 'zero', am1=replace(am1, am!=0, 'one'))

您可以使用相应的替换元素更改多个元素的其他选项是 mgsub 来自 qdap

 library(qdap)
  mtcars %>%
        select(am) %>%
        mutate(am1= mgsub(0:1, c('zero', 'one'), am))

更新

如果您需要使用 replace 根据另一个变量更改一个变量的值,

mtcars %>% 
       select(am,gear) %>%
       mutate(am= replace(am, gear %in% 4:5, 1000))