Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中使用因子ifelse_R_If Statement_R Factor - Fatal编程技术网

在R中使用因子ifelse

在R中使用因子ifelse,r,if-statement,r-factor,R,If Statement,R Factor,我正在重建一个物种名称数据集。它有一个带有拉丁名的列,当这些名称可用时,它有一个带有普通名称的列。我想做一个第三栏,如果可以的话,给出一个普通的名字,否则就是拉丁名。普通名称和拉丁名称都在factor类中。 我已尝试使用if循环: if(art2$trivname==""){ art2$artname=trivname }else{ art2$artname=latname } 它为我提供了正确的trivnames,但在提供拉丁名称

我正在重建一个物种名称数据集。它有一个带有拉丁名的列,当这些名称可用时,它有一个带有普通名称的列。我想做一个第三栏,如果可以的话,给出一个普通的名字,否则就是拉丁名。普通名称和拉丁名称都在factor类中。 我已尝试使用if循环:

  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

art仅获取数字意味着您只需在作业中添加
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 thon”,因为它避免了循环),只需将代码> > ARTMENT/<代码>分配到<代码>琐碎< /代码>,然后用“代码> LATNEX <代码>…< /P>覆盖空白代码。

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
art2$artname <- as.factor(art2$artname)