2016-03-27 14 views
0

大文字のExcelスプレッドシートは、日付が%m/%d/%Yであります。 Rでは、私はas.Dateを使って日付形式を変換します。問題は、私は私を与えるであろう機能which(dataframe$colname_X<1900)を使用することができ、214は個々の列については、2014年データセルが正しく変換されていないことを確認しました

... 
235  2014-01-20 
236  2014-03-03 
237  2014-01-24 
238  2014-03-07 
239  214-05-23 
240  2014-01-31 
241  2014-02-19 
242  2014-03-27 
... 

の代わりに入力された場合についてExcelで日付のいくつかは、手動手段として、たとえば、誤って入力されたということです行番号。私はすでにそれがどの列であるか知っているので、これは簡単です。

私の質問は、データフレーム全体に同じことをすることができます。その結果、不良セルの行番号と列番号の両方を取得できますか。以降で

+1

あなたは、日付の複数の列を持っているのですか?もしそうなら、あなたは 'apply'を使って全ての列に対してどの関数を実行できるのでしょうか?例えば'apply(df、2、function(x)which(x <1900))'これは、各列に対応する結果のリストをエラーのあるインデックスとともに返します。 – jalapic

+0

@jalapicありがとう、これは私が探していたものです。唯一のわずかな不都合は、日付が正しく入力されたときに 'integer(0) 'という出力を持つすべての列の名前を返すことです。例えば、上記の例では間違ったエントリがあった場合は' [1] 239'です。それは素晴らしいですが、実際に大量のカラムがあった場合、この出力が煩雑になることがあります。 – Oposum

+0

列の順序を保持する必要があります。だから、この 'mycolnames < - colnames(df)'のような元の列名を保存しておけば、正しいデータを持っているときにこの 'colnames(df)<-mycolnames' – jalapic

答えて

1

(最初の数値行列に変換する必要があります)arr.ind = TRUEで一つの潜在的解決策をwhichを使用

すべてのエラーを特定を使用してください。apply

results <- apply(df, 2, function(x) which(x<1900))

これは、各列がリストの要素としてリストを返します。あなたが空になっているもの(すなわち、エラーなし)を気にしないとして、あなたはエラーのみを有するものを維持するために、リストを縮小することができます:

results[lapply(results,length)>0]

+0

それだけです。ありがとう! – Oposum

2

dat <- rd.txt("235  2014-01-20 # #function to use read.table on text 
236  2014-03-03 
237  2014-01-24 
238  2014-03-07 
239  214-05-23 
240  2014-01-31 
241  2014-02-19 
242  2014-03-27") 
dat <- cbind(dat,dat) 
dat[] <- lapply(dat, as.Date, origin="1970-01-01") 
> dat 
     X235 X2014.01.20  X235 X2014.01.20 
1 1970-08-25 2014-03-03 1970-08-25 2014-03-03 
2 1970-08-26 2014-01-24 1970-08-26 2014-01-24 
3 1970-08-27 2014-03-07 1970-08-27 2014-03-07 
4 1970-08-28 0214-05-23 1970-08-28 0214-05-23 
5 1970-08-29 2014-01-31 1970-08-29 2014-01-31 
6 1970-08-30 2014-02-19 1970-08-30 2014-02-19 
7 1970-08-31 2014-03-27 1970-08-31 2014-03-27 

which(sapply(dat,as.numeric) < (as.numeric(as.Date("1900-01-01"))), arr.ind=TRUE) 
    row col 
[1,] 4 2 
[2,] 4 4 
+0

ありがとうございますが、データフレームにはいくつかの要素の列がありますので、サブセット化と変換を避け、上記の応答と一緒に行きます。 – Oposum

関連する問題