问题描述
我在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