2016-12-11 10 views
0

Rで大量のデータセットをインポートしていて、素早く列を通過し、列にカテゴリ値、数値、日付などがあるかどうかを確認する方法があるstr(df)またはclass(df)の場合、列のほとんどが誤って表示されます。データセットをインポートするときにカテゴリ変数を特定するR

たとえば、一部の列は数値としてラベル付けされていますが、実際には要素であることを示す列には10の一意の値(1〜10の範囲)しかありません。定格を表す11の一意の値しか持たない他の列があります.0から5までの0.5単位の増分です。別の列には、国コード(172の値)があります。範囲は1〜230です。

変数の性質を理解するために各列を通らずに列を要素にすべきかどうかを素早く特定する方法はありますか? (データセットには多くの列があります)

ありがとう!現時点で


、私は最初の二つのケースをキャッチするために、次のコードのバリエーションを使用してきた:

as.numeric(df[,51])     #convert the column to numeric 
len = length(unique(df[,51]))  #find number of unique values 
diff = max(df[,51]) - min(df[,51]) #calculate difference between min and max 
ord = (len - 1)/diff    # calculate the increment if equally spaced 

#subtract the max value from second to max value to find the actual increment (only uses last two values) 
step = sort(unique(df[,51]),partial=len)[len] - 
sort(unique(df[,51]),partial=len-1)[len-1] 

ord == step       #check if the last increment equals the implied increment 

しかし、このアプローチはのために(変数の各々が等間隔されていることを前提と例、0.5をインクリメント)、最後の2つの値の間のスペースのみをテストします。これは、6つの一意の値を持つc(1,2,3.5,4.5,5,6)が含まれている列をキャッチしませんでしたが、中央に不均等な間隔(これは私のデータセットでは共通ではありません)。

答えて

1

別個の値が数値変数対係数を示すだろうどのように多くの明白ではありませんが、境界と判断した場合は、

table(sapply(df, function(x) { length(unique(x))})) 

であなたのデータであるかを確認するために、すべての変数を調べることができ要因と数値を使用すると、

which(sapply(df, function(x) {length(unique(x)) < k})) 
+0

参考に要因を特定することができKであり、私は疑問に掲載コードの変化に取り組んできた理由である数値/ファクター間のデータセットには、実際のカットオフは、ありません要因を別の方法で特定しようとする –

関連する問題