【问题标题】:Using ifelse on factor in R在 R 中对因子使用 ifelse
【发布时间】:2012-06-30 15:02:00
【问题描述】:

我正在重组一个物种名称数据集。它有一个带有拉丁名称的列和一个带有琐碎名称的列(如果可用)。我想创建一个第三列,在可用时给出琐碎的名称,否则是拉丁名称。琐碎名称和拉丁名称都属于因子类。 我尝试过使用 if 循环:

  if(art2$trivname==""){  
    art2$artname=trivname   
    }else{  
      art2$artname=latname  
    }  

它给了我正确的 trivnames,但只在提供拉丁名称时给出 NA。
当我使用 ifelse 时,我只会得到数字。

一如既往,感谢所有帮助:)

【问题讨论】:

    标签: r if-statement r-factor


    【解决方案1】:

    例子:

    art <- data.frame(trivname = c("cat", "", "deer"), latname = c("cattus", "canis", "cervus"))
    art$artname <- with(art, ifelse(trivname == "", as.character(latname), as.character(trivname)))
    print(art)
    #   trivname latname artname
    # 1      cat  cattus     cat
    # 2            canis   canis
    # 3     deer  cervus    deer
    

    (我认为 options(stringsAsFactors = FALSE) 作为默认值对大多数人来说会更容易,但是你去...)

    【讨论】:

      【解决方案2】:

      仅获取数字表明您只需将as.character 添加到您的作业中,if-else 可能会起作用您似乎也没有在作业中引用数据框?

      if(as.character(art2$trivname)==""){  
          art2$artname=as.character(art2$trivname)
          }else{  
            art2$artname=as.character(art2$latname)
          }  
      

      选项 2:使用ifelse

       art2$artname= ifelse(as.character(art2$trivname) == "", as.character(art2$latname),as.character(art2$trivname))
      

      artname 分配给trivial 可能更容易(而且更“R-thonic”,因为它避免了循环),然后用latname 覆盖空白的...

      art2 = art
      art2$artname = as.character(art$trivname)
      changeme = which(art2$artname=="")
      art2$artname[changeme] = as.character(art$latname[changeme])
      

      【讨论】:

        【解决方案3】:

        如果 art2 是数据框,而 artname 是新列,则另一种可能的解决方案:

        art2$artname <- as.character(art2$trivname)
        art2[art$artname == "",'artname'] <- as.character(art2[art2$artname == "", 'latname'])
        

        如果您想在新列中添加因子:

        art2$artname <- as.factor(art2$artname)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-19
          • 1970-01-01
          • 1970-01-01
          • 2020-04-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多