2017-07-31 2 views
0

私は大部分がNA値といくつかのデータを持つdata.frameを持っています。これをクリーンアップするには、すべてのNA値を選択してコピーするだけです(NAを含む行や列ではなく、値のみをコピーする必要があります)。これは簡単な作業のように思えましたが、これまでに試した解決策はありませんでした。私は、結果の変数/ファイルに行数をそのまま残したくないのではなく、すべてのNA値を列ごとに個別に削除することを明確にしたいと思います。あたかも個々のリストと私が情報/値を含むすべてのセルを一番上にソートし、下にNAであるすべてのセルをソートする列であるかのように。data.frame内のすべての非NA値を選択し、それらを新しい変数にコピーします。

ありがとうございます。

更新例:

Col 1 Col 2 Col 3 
Bar  NA  But 
NA  There NA 
Foo  NA  NA 
NA  NA  Not 
NA  NA  NA 
Here NA  NA 
NA Better NA 

望ましい結果:

Col1 Col2 Col3 
Bar There But 
Foo Better Not 
Here 

私はそのまま列を維持する必要がありますが、カラム内のすべての値が上に移動する必要があります。したがって、すべての非NA値を選択して新しいデータフレーム(またはその他のもの)に貼り付けることができれば、同じ量の列が含まれていますが、値はなく、NAはありません。

希望が明確になります。ありがとうございました。

+0

期待された出力と一緒に[再現可能な例](http://stackoverflow.com/questions/5963269)を提供してください – Sotos

+0

実際の例はありませんが、すべての列にループ/適用することはできません。リストに新しい列? – MLEN

+1

私には全くわかりませんが、おそらくあなたは 'which(is.na(df)、arr.ind = TRUE)'を探しています(野生の推測ですが、例を挙げてください) – nicola

答えて

2

私が正しくあなたを理解していれば、これはあなたが欲しいものを行います。

# sample data 

df = data.frame(a=c(1,NA,2),b=c(NA,NA,4)) 
df2 = lapply(df, function(x) {x[!is.na(x)]}) 
df3 = sapply(df2, '[', seq(max(sapply(df2,length)))) 

入力:リストのリストとして

a b 
1 1 NA 
2 NA NA 
3 2 4 

出力1、:

> df2 
$a 
[1] 1 2 

$b 
[1] 4 

出力2 、データフレームとして:

> df3 
    a b 
[1,] 1 4 
[2,] 2 NA 

希望します。

+1

新しい編集に基づいて、OPには 'df2'だけが必要です。 – nicola

+0

私はあまりにも、頭のアップ、修正された答えのおかげだと思う。 – Florian

関連する問題