2012-03-30 13 views
1

同じ名前でいくつかのデータフレームに由来する長さが異なる列で、Rで統計分析をいくつか行いたいとします。リスト内のデータフレームの列を編集するR

:私は「NA」でそれを置き換える、単語の代わりに数字の「FAILED」含まれています(my.colが言う)関心の列のいくつかの要素として、今

my.list <- list(df1, df2, df3, df4) 

:私は、リストを作成しました

for (i in 1:length(my.list)){ 
    for (j in 1:length(my.list[[i]]$my.col)){ 
     if (my.list[[i]]$my.col[j] %in% c("FAILED")) 
     {my.list[[i]]$my.col[j] <- 'NA'}; 
    } 
} 

私はこれが問題の最良の解決策ではないと確信していますが、少なくとも動作します。私は、別の列(my.colではなく)に無効な要素レベルが「NA」で置き換えられているという警告を出すと言わざるを得ない。実際にmy.col以外の列が実際に考慮される理由はわかりません。改善のための提案が高く評価されています。

残りの数字には、ポイントではなく小数点が含まれています。 「dec =」、「」で.csvファイルをインポートするときにこの問題を解決しようとしましたが、数字以外のもの(「FAILED」など)が含まれている列では機能しません。だから、コンマを置き換える必要があります。これが私にとってはうまくいきません。私は試しました:

for (i in 1:length(my.list)){ 
     as.numeric(gsub(",", ".", my.list[[i]]$my.col)) 
} 

これはエラーではありませんが、何も変更しません。

as.numeric(gsub(",", ".", my.list[[4]]$my.col)) 

リストの4番目の要素については何をしたいのですか。私の視点から見ると、どちらも同じでなければなりません。これの問題は何ですか?

Btw、他の列をデータフレームから削除したくないのは、他の分析のために将来必要になるかもしれないからです。

+1

gsubは修正された式を返します。したがって、あなたはそれを割り当てる必要があります: 'my.list [[i]] $ my.col < - as.numeric(gsub("、 "、"。 "、my.list [ i]] $ my.col)) ' – smu

+0

再現可能な例は素晴らしいです(つまり、Rに組み込まれたデータを使用するか、独自のデータを提供する)。 –

+0

@smu:ありがとう、これは動作します! – AnjaM

答えて

1

これは、plyrパッケージを使用して効率的に行うことができます。

この例では、内蔵の虹彩データを使用しています。 "FAILED"をNAに置き換える代わりに、 "versicolor"の値を置き換えました。 昏睡状態を期間に置き換える代わりに、sをwに置き換えました。

my.list <- list(iris, iris) 

library(plyr) 

my.list<-llply(.data=my.list, 
       function(x) { x$Species<-as.character(x$Species) 
          x$Species[x$Species=="versicolor"]<-"NA" 
          x$Species<-gsub(pattern="s", 
              replacement="w", 
              x=x$Species) 
          x$Species<-as.factor(x$Species) 
          return(x) 
       }) 

レベルに因子を追加することを回避する方法の例としてas.characterが追加されました。 as.factorは、列が新しいレベルの要素としての戻り値であることを保証します。

これにより、listからdata.frameに柔軟に変換することもできます。単にllplyをldplyに置き換えてください。

+0

ありがとう、これは完全に動作し、両方のステップを組み合わせています!私はこのパッケージを詳しく見ていきます。私が理解していない唯一の事は、なぜ "my.col"がもともとクラス "factor"を持っていて、my.colが要因であったリスト要素に対してコード警告が生成された後です( "invalid factor level、生成されたNA」)。あなたのコードを適用する前に、要因を取り除く(または要因を文字からクラスに変える)のが理にかなっていますか?それとも実際には関係ないのですか? – AnjaM

+0

@ user1003358、編集された応答を参照してください。 –

+0

ああ、今、それは動作します、ありがとう! – AnjaM

関連する問題