Rのデータ検証に関するレポートを作成しようとしています。私は、データの一般的な要約を生成するためにvalidateパッケージを使用しましたが、私たちの検証チェックに失敗したことの詳細を取得する必要があります。R列が存在する場合のみデータを検証する
私が最後にしたいのは、IDのデータフレーム、テストに失敗したカラム、テストに失敗した値です。ただし、すべての列が必須ではないので、列がそこにあるかどうかを知らずにデータが通過するかどうかを確認する必要があります。
必須のデータを持つ他のデータフレームについては、テストに合格したかどうかをTrue/Falseに変換しました。我々はしないので、あると私はこれらを実行することはできません
second_data_check = data.frame(a = 'a>21',
b = 'b > 31',
c = 'c> 51',
d = 'd> 61')
:たとえば:
library(dplyr)
library(validate)
library(tidyr)
test_df = data.frame(id = 1:10,
a = 11:20,
b = c(21:25,36,27:30),
c = c(41,52,43:50))
text_check = test_df %>% transmute(
a = a>21,
b = b > 31,
c = c> 51
)
value_fails<-data.frame(id = test_df$id, text_check[,-1][colSums(text_check[,-1]) > 0])
value_failures_gath = gather(value_fails, column, changed, -id) %>% filter(changed == TRUE)
value_failures_gath$Value = apply(value_failures_gath, c(1), function(x)
test_df[test_df$id == x[['id']], grep(x[['column']], colnames(test_df))])
value_failures_gath<-value_failures_gath %>% arrange(id, column)
value_failures_gath$changed<-NULL
colnames(value_failures_gath)<-c('ID','Field','Value')
> value_failures_gath
ID Field Value
1 2 c 52
2 6 b 36
私はのスタイルで、私が作成したいのチェックとデータフレームを持っていますチェックする列Dがあるが、この検証によって実行される他のデータフレームは列Dを有するが、例えば列Bを有さないことがある。このデータフレームをフィルタリングして、私たちが持っているカラムのテストだけを含めることができますが、このデータフレームのテストをチェックとして適用する方法はありますか?これを行うより良い方法はありますか?
ありがとうございました。