如果然后在r中结束等价...编辑:在dplyr

时间:2014-12-30 01:22:09

标签: r

想象一个向量animals <- c("dog", "wolf", "cat"); animals <- as.data.frame(animals)

我想创建一个如下所示的新矢量:animals$dogs <- c("dog", "dog", "cat)

是否有dplyr函数可以执行此操作?

2 个答案:

答案 0 :(得分:2)

animals <- data.frame(animals=c("dog", "wolf", "cat"))

我相信dplyr成语是:

library("dplyr")
animals %>% mutate(dogs=ifelse(animals %in% c("dog","wolf"),
                                  "dog",
                                  "cat"))

您也可以使用car::recode()

library("car")
animals %>% mutate(dogs=recode(animals,"c('dog','wolf')='dog'"))

答案 1 :(得分:2)

我能想到的最快的方法是对vector或data.frame进行子集化并替换&#34; wolf&#34;直接没有ifelse的条目:

animals <- c("dog", "wolf", "cat")
dogs <- animals
dogs[dogs == "wolf"] <- "dog"

或者在data.frame的情况下:

animals <- data.frame(animals=c("dog", "wolf", "cat"))
animals$dog <- animals$animals
animals$dog[animals$dog == "wolf"] <- "dog"

优点应该是您只修改数据的子集而不是整个向量。如果您的数据很小,它可能不会产生差异,甚至可能比ifelse慢,但对于更大的矢量,我相信它会表现更好(不是基准测试)。