2011-10-19 8 views
2

에 포함되지 :, 나는 다음과 같이 R에 data.frame이 목록

fruits 
    X1 X2  X3 
    aa kiwi 15 
    ba orange 25 
    cc lemon 23 
    ba apple 17 
    cc lemon 19 
    cc orange 18 
    cc orange 21 
    ba banana 17 

나는 "오렌지"와 "를 제외하고 열 X2의 모든 값을 대체하고 싶습니다 레몬 "과"기타 ". R에서 그것을하는 방법?

예 데이터 :

fruits <- structure(list(X1 = structure(c(1L, 2L, 3L, 2L, 3L, 3L, 3L, 2L 
), .Label = c("aa", "ba", "cc"), class = "factor"), X2 = structure(c(3L, 
5L, 4L, 1L, 4L, 5L, 5L, 2L), .Label = c("apple", "banana", "kiwi", 
"lemon", "orange"), class = "factor"), X3 = c(15L, 25L, 23L, 
17L, 19L, 18L, 21L, 17L)), .Names = c("X1", "X2", "X3"), class = "data.frame", row.names = c(NA, 
-8L)) 

답변

5

먼저 변경할 행을 나타내는 변수를 만듭니다. 예를 들어 이렇게 할 수 있습니다. 열이 계수 (가능성을) 인 경우, 그것은 다음과 같이 좀 더 일을 걸릴 것으로

fruits$X2[shouldBecomeOther]<- "other" 

참고 :

tmp<-as.character(fruits$x2) 
tmp[shouldBecomeOther]<-"other" 
fruits$x2<-factor(tmp) 
을 다음과 같이 :

shouldBecomeOther<-!(fruits$X2 %in% c("orange", "lemon")) 

는 그런 다음 인덱서를 사용

1

무엇에 대해 : 위의 솔루션에서

R> fruits = data.frame(X1 = 1:3, X2 = c("kiwi", "orange", "lemon")) 
R> fruits$X2 = as.character(fruits$X2) 
R> fruits[!(fruits$X2 %in% c("lemon", "orange")),]$X2 = "Other" 
R> fruits 
    X1  X2 
1 1 Other 
2 2 orange 
3 3 lemon 

, 나는에 "문자"요인을 변환. 당신은 당신도 할 수있는,이 작업을 수행 할 필요가 없습니다 : 당신이 read.csv를 사용하는 경우 FALSE

  • 의 stringsAsFactors을 사용 = 당신은 데이터 프레임을 만들 때

    1. , 인수 stringsAsFactors을 사용하는 당신은 작업
    2. 직접 요인 : I 라인의 첫 번째 요소의 수준을 확장

      R> fruits$X2 = factor(fruits$X2, levels = c(as.character(fruits$X2), "Other")) 
      R> fruits[!(fruits$X2 %in% c("lemon", "orange")),]$X2 = "Other" 
      R> fruits 
          X1  X2 
      1 1 Other 
      2 2 orange 
      3 3 lemon 
      

      주의 사항 1.

  • 2

    쉬운 방법은 요소를 문자 벡터로 강제 변환 한 다음 필요한 클래스에없는 요소를 식별하고이를 "other"으로 바꾸고 마지막으로 요인으로 다시 강제 변환하는 것입니다.

    transform(fruits, 
          X2 = factor(replace(as.character(X2), 
               list = !X2 %in% c("orange","lemon"), 
               values = "other"))) 
    

    제공 :

    > transform(fruits, X2 = factor(replace(as.character(X2), 
    +          list = !X2 %in% c("orange","lemon"), 
    +          values = "other"))) 
        X1  X2 X3 
    1 aa other 15 
    2 ba orange 25 
    3 cc lemon 23 
    4 ba other 17 
    5 cc lemon 19 
    6 cc orange 18 
    7 cc orange 21 
    8 ba other 17 
    

    아니면 손으로 작업을 수행 할 수 있습니다

    fruits <- transform(fruits, 
            X2 = {x <- as.character(X2) 
              x[!x %in% c("orange","lemon")] <- "other" 
              factor(x)}) 
    > fruits 
        X1  X2 X3 
    1 aa other 15 
    2 ba orange 25 
    3 cc lemon 23 
    4 ba other 17 
    5 cc lemon 19 
    6 cc orange 18 
    7 cc orange 21 
    8 ba other 17 
    

    replace() 기능을 사용하여 먼저이 주제에 두 가지 변화가있다

    여기서는 transform()을 사용하여 환경 내에서 조작을 수행합니다. whe 재 입력하기가 번거로 우며 fruits$X2과 같은 것을 사용하지 않고도 X2을 볼 수 있습니다.

    관련 문제