3

だから私がRデータフレームに読んでいるcsvを取得しました、それはこのように見えます

clientx,clienty,screenx,screeny
481,855,481,847
481,784,481,847
481,784,481,847
879,292,879,355

もちろん、最初の行はヘッダーです。したがって、1〜4桁の数値データを含む4つの列があります。欠落している値を示す-1を除いて、セットに負の数はありません。4つの列のいずれかに-1を含むすべての行を削除したいと思います。

助けてくれてありがとう

4

2 に答える 2

9

最も効率的な方法は、のna.strings引数を使用してすべての値をとしてread.csv()コーディングしてから、不完全なケースを削除することです。-1NA


ステップ1:設定na.strings=-1read.csv()

x <- read.csv(text="
clientx,clienty,screenx,screeny
481,855,481,847
481,784,481,847
481,784,481,847
-1,292,879,355", header=TRUE, na.strings=-1)

x
clientx clienty screenx screeny
1     481     855     481     847
2     481     784     481     847
3     481     784     481     847
4      NA     292     879     355

ステップ2:complete.casesまたはを使用しますna.omit

x[complete.cases(x), ]
  clientx clienty screenx screeny
1     481     855     481     847
2     481     784     481     847
3     481     784     481     847

na.omit(x)
  clientx clienty screenx screeny
1     481     855     481     847
2     481     784     481     847
3     481     784     481     847

于 2012-11-19T13:25:20.160 に答える
8

直接的な方法:

df <- df[!apply(df, 1, function(x) {any(x == -1)}),]

更新:data.frameに文字列が含まれている場合、このアプローチは失敗します。これは、data.frameがapply暗黙的にマトリックス(1つのタイプのデータのみを含む)に変換され、文字タイプが数値タイプよりも優先されるため、data.frameが文字マトリックスに変換されるためです。

または、-1をに置き換えてから:NAを使用します。na.omit

df[df==-1] <- NA
df <- na.omit(df)

これらは機能するはずです、私はチェックしませんでした。あなたの質問を説明するために、常に再現可能な例を提供するようにしてください。

于 2012-11-19T13:15:01.747 に答える