2011-04-19 3 views
11

는 "우리가 x는 경우 x가 1보다 작거나 같은 경우 반환하도록 dataframe에 새로운 변수를 추가 할 수있는 방법조건에 따라 data.frame에서 새 변수를 만드는 방법은 무엇입니까?

x y 
1 1 
2 4 
4 5 

은"좋은 "이 반환 3 사이 5 dataframe 있다고 가정 나쁜 "else"fair "를 반환합니다.

ocram으로 표시된 방법이 적용되지만 여기서는 작동하지 않습니다.

d1 <- c("e", "c", "a") 
d2 <- c("e", "a", "b") 

w <- ifelse(d1 == "e" & (d2=="e"), 1, ifelse((d1 == "a") & (d2 =="b"), 2, ifelse(d1 == "e"),3,99)) 

아이디어가 있으십니까? 감사합니다.

+1

'cut' 함수를 찾으십시오. – hadley

+0

괄호를 엉망으로 만들었으므로 마지막 코드가 작동하지 않습니다. 언제나'ifelse (cond, ifTrue, ifFalse)'이어야하며,'ifelse (cond) ifTrue, ifFalse'는 절대 안됩니다. – mbq

+0

감사! 지적했다. :) – eastafri

답변

17

명백한 가능성은 "if-else 조건"을 사용하는 것입니다. 편집에서 추가 질문 ** 를 들어 그 예를

x <- c(1, 2, 4) 
y <- c(1, 4, 5) 
w <- ifelse(x <= 1, "good", ifelse((x >= 3) & (x <= 5), "bad", "fair")) 
data.frame(x, y, w) 

** 당신이 무엇을 기대인가요? 당신이 ifelse 기능이 편안하지 않으면

> d1 <- c("e", "c", "a") 
> d2 <- c("e", "a", "b") 
> 
> w <- ifelse((d1 == "e") & (d2 == "e"), 1, 
+ ifelse((d1=="a") & (d2 == "b"), 2, 
+ ifelse((d1 == "e"), 3, 99))) 
>  
> data.frame(d1, d2, w) 
    d1 d2 w 
1 e e 1 
2 c a 99 
3 a b 2 

, 당신은 또한 응용 프로그램에 대한 ifelse 문 작업 할 수 있습니다.

+0

감사합니다 톤, 그러나 접근 방식은 2 조건으로 제한됩니다? 위의 편집 된 질문보기 – eastafri

+1

내 대답을 편집했습니다. – Marco

3

레벨 수가 매우 제한적인 경우 y을 factor로 변환하고 레벨을 변경할 수 있습니다.

> xy <- data.frame(x = c(1, 2, 4), y = c(1, 4, 5)) 
> xy$w <- as.factor(xy$y) 
> levels(xy$w) <- c("good", "fair", "bad") 
> xy 
    x y w 
1 1 1 good 
2 2 4 fair 
3 4 5 bad 
관련 문제