2016-12-11 186 views
0

我在R中導入了一個大型數據集,並且好奇是否有快速遍歷列並確定列是否具有分類值,數字,日期等的方法。當我使用str(df)class(df),列大多回來mislabeled。在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)並且僅測試最後兩個值之間的空間。這不會捕獲包含c(1,2,3.5,4.5,5,6)的列,該列有6個唯一值,但中間間距不均勻(並非在我的數據集中這是常見的)。

回答

1

這不是明顯不同的值會多少表明因素VS數值變量,但你可以檢查所有的變量,看看有什麼是你的數據與

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

,如果你決定之間的邊界因子和數字是k你可以用這個因子來識別因子

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

很有幫助,嘗試以另一種方式識別因素 –