2011-10-19 11 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

まず、変更する行を示す変数を作成します。あなたはこれを行うことができます。

tmp<-as.character(fruits$x2) 
tmp[shouldBecomeOther]<-"other" 
fruits$x2<-factor(tmp) 
:列は(可能性が高い)要因であるならば、それはこのようないくつかのより多くの仕事を、取ること

fruits$X2[shouldBecomeOther]<- "other" 

注:

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. 直接の要因:私はラインの最初の因子のレベルを拡張

      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()機能を使用して、最初にこのテーマに2つのバリエーションがあります。

    ここではtransform()を使用していますので、環境内で操作を行います再入力するのが面倒なfruits$X2のようなものを使わなくても、X2が表示されます。

    関連する問題