2012-06-30 11 views
2

나는 종명의 데이터 집합을 재구성 중입니다. 라틴어 이름이있는 열과 사용 가능한 경우 사소한 이름이있는 열이 있습니다. 가능한 경우 사소한 이름을 제공하는 세 번째 열을 만들려고합니다. 그렇지 않으면 라틴어 이름을 사용합니다. 사소한 이름과 라틴어 이름은 모두 factor-class입니다. 내가 만약 루프와 시도했다 : 그것은 나에게 올바른 trivnames을 제공R의 요인에 ifelse 사용

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

하지만, 라틴어 이름을 공급하는 경우에만 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"는 루프를 피할 수 있기 때문에) 그냥 전반적으로 trivialartname을 할당 한 후 덮어 아마 쉽게 latname와 빈 사람 ...

art2가 dataframe 인 경우
art2 = art 
art2$artname = as.character(art$trivname) 
changeme = which(art2$artname=="") 
art2$artname[changeme] = as.character(art$latname[changeme]) 
0

하고, artname 새 열, 다른 가능한 솔루션 :

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

그리고 당신은 새로운 열의 요소를 원하는 경우 :

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