2012-06-30 2 views
2

Я перестраиваю набор данных о названиях видов. Он имеет столбец с латинскими именами и столбцом с тривиальными именами, когда они доступны. Я хотел бы сделать третий столбец, который дает тривиальное имя, когда оно доступно, иначе латинское имя. И тривиальные имена, и латинские имена находятся в фактор-классе. Я попытался с if-цикла:Использование ifelse по коэффициенту в R

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

Это дает мне правильные trivnames, но только дает NA при подаче латинских названий.
И когда я использую ifelse, я получаю только цифры.

Как всегда, все оцененная помощь :)

ответ

4

Пример:

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), как по умолчанию будет легче для большинства людей, но там вы идете ...)

0

Получение только чисел предполагает, что вам просто нужно добавить 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 к trivial через борт, а затем перезаписать пустые онов с latname ...

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

Если ART2 является в dataframe, и artname новый столбец, другое возможное решение:

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

И если вы хотите факторы в новой колонке:

art2$artname <- as.factor(art2$artname) 
Смежные вопросы