【问题标题】:Dplyr mutate using existing columnsDplyr 使用现有列进行变异
【发布时间】:2020-08-21 09:56:44
【问题描述】:

我在 R 中有这个 DF:

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

我想创建一个新列(称为 pop),其中:

  • 如果species == "dac",它会将相应的值放在"label"列中
  • 否则,它将从“物种”列中放入相应的值

结果如下:

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

不幸的是,我无法使用 if else 和 mutate 来实现此功能。 你能帮忙吗?

谢谢!

M

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    她是ab base 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
    

    【讨论】:

    • 谢谢!第一个解决方案不起作用(输入数字而不是文本,这是我的问题),但第二个解决方案有效!
    【解决方案2】:

    试试这个:

    library(dplyr)
    species <- c("dac", "dac", "theo",  "syl")
    label <- c("dac1", "dac2", "gna", "gni")
    df <- data.frame(species, label)
    
    pop <- c("dac1", "dac2", "theo",  "syl")
    df2 <- data.frame(species, label, pop)
    
    mutate(df, pop = if_else(species == "dac", label, species))
    #>   species label  pop
    #> 1     dac  dac1 dac1
    #> 2     dac  dac2 dac2
    #> 3    theo   gna theo
    #> 4     syl   gni  syl
    

    【讨论】:

      猜你喜欢
      • 2018-08-24
      • 1970-01-01
      • 2018-06-24
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多