簡體   English   中英

在R中使用ifelse on factor

[英]Using ifelse on factor in R

我正在重組一個物種名稱的數據集。 它有一個帶有拉丁名稱的列和具有普通名稱的列(如果可用)。 我想制作第3列,在可用時給出瑣碎的名稱,否則為拉丁名稱。 瑣碎的名字和拉丁名字都屬於因子級。 我試過if-loop:

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

它給了我正確的trivnames,但只在提供拉丁名字時給出了NA。
當我使用ifelse時,我只會得到數字。

一如既往,所有幫助贊賞:)

例:

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

(我認為默認選項(stringsAsFactors = FALSE)對大多數人來說會更容易,但是你去......)

只獲得數字表明你只需要在你的作業中添加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))

它可能更容易(並且更多“R-thonic”,因為它避免了循環)只是將artname分配給artnametrivial ,然后用latname覆蓋空白的...

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

如果art2是數據artname是新列,則另一種可能的解決方案:

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

如果您想要新列中的因素:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM