用替换功能替换多个元素

时间:2015-01-31 09:14:45

标签: r dplyr

mtcars$am中,我想将0的实例替换为0,将实例1替换为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

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

1 个答案:

答案 0 :(得分:3)

您可以尝试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" zero和replace zero' by一列的列。 p>

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

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

qdap

更新

如果您需要使用 library(qdap) mtcars %>% select(am) %>% mutate(am1= mgsub(0:1, c('zero', 'one'), am)) 根据另一个变量更改一个变量中的值,

replace