想象一个向量animals <- c("dog", "wolf", "cat"); animals <- as.data.frame(animals)
我想创建一个如下所示的新矢量:animals$dogs <- c("dog", "dog", "cat)
是否有dplyr
函数可以执行此操作?
答案 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慢,但对于更大的矢量,我相信它会表现更好(不是基准测试)。