使用现有列进行Dplyr变异

问题描述

我在R中有这个DF:

species <- c("dac","dac","theo","syl")
label <- c("dac1","dac2","gna","gni")
df <- data.frame(species,label)

我要在其中创建一个新列(称为pop):

  • 如果物种==“ dac”,则将相应的值放在“标签”列中
  • 否则,它将在“种类”列中输入相应的值

结果如下:

pop <- c("dac1","syl")
df2 <- data.frame(species,label,pop)

不幸的是,我无法通过if else和mutate来使这个工作正常。 你能帮忙吗?

谢谢!

M

解决方法

她是基础R选项

within(df,pop <- ifelse(species == "dac",label,species))

within(df,pop <- df[cbind(1:nrow(df),ifelse(species == "dac",2,1))])

给出

  species label  pop
1     dac  dac1 dac1
2     dac  dac2 dac2
3    theo   gna theo
4     syl   gni  syl
,

尝试一下:

library(dplyr)
species <- c("dac","dac","theo","syl")
label <- c("dac1","dac2","gna","gni")
df <- data.frame(species,label)

pop <- c("dac1","syl")
df2 <- data.frame(species,pop)

mutate(df,pop = if_else(species == "dac",species))
#>   species label  pop
#> 1     dac  dac1 dac1
#> 2     dac  dac2 dac2
#> 3    theo   gna theo
#> 4     syl   gni  syl