2016-12-11 13 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) и проверяет только пробел между двумя последними значениями. Это не поймало бы столбец, содержащий c (1,2,3,5,4,5,5,6), который имеет 6 уникальных значений, но неравномерное расстояние посередине (не то, что это распространено в моем наборе данных).

ответ

1

Это не очевидно, сколько различных значений может указывать на фактор против числовой переменной, но вы можете исследовать все переменные, чтобы увидеть, что в ваших данных с

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

и если вы решите, что граница между фактор и числовой является K вы можете определить факторы, с

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

отзывчивостью, но нет никакого реального среза в наборе данных между цифровым/фактором, поэтому я работаю с изменением коды, публикуемым в вопросе попытаться определить факторы другим способом –