2013-02-28 1 views
0

У меня есть матрица данных (900 столбцов и 5000 строк), которые я бы хотел сделать на ..Как изменить переменные на количественные?

Матрица очень хорошо смотрится в excel (что означает, что все значения являются количественными), но после того, как я прочитал мой файл в R и попробуйте запустить код pca, я получаю сообщение об ошибке «Следующие переменные не являются количественными», и я получаю список не количественных переменных.

Таким образом, некоторые переменные являются количественными, а некоторые - нет. См. Пример следующим образом. Когда я проверяю переменную 1, она правильная и количественная .. (случайным образом некоторые переменные являются количественными в файле) Когда я проверяю переменную 2, она неверна и не является количественной .. (случайным образом некоторые переменные, подобные этому, -quantitative в файле)

> data$variable1[1:5] 
[1] -0.7617504 -0.9740939 -0.5089303 -0.1032487 -0.1245882 

> data$variable2[1:5] 
[1] -0.183546332959017 -0.179283451229594 -0.191165669598284 -0.187060515423038 
[5] -0.184409474669824 
731 Levels: -0.001841783473108 -0.001855956210119 ... -1,97E+05 

Так что мой вопрос, как я могу изменить все без количественных переменных в количественные ??

Создание короткого файла не помогает, так как значения сами по себе становятся количественными. Я не знаю, что происходит. Итак, вот ссылка для моего оригинального файла < - https://docs.google.com/file/d/0BzP-YLnUNCdwakc4dnhYdEpudjQ/edit

Я также пробовал ответы ниже, но это все равно не помогает.

Итак, позвольте мне показать, что именно я сделал,

> data <- read.delim("file.txt", header=T) 
> res.pca = PCA(data, quali.sup=1, graph=T) 
Error in PCA(data, quali.sup = 1, graph = T) : 
The following variables are not quantitative: batch 
The following variables are not quantitative: target79 
The following variables are not quantitative: target148 
The following variables are not quantitative: target151 
The following variables are not quantitative: target217 
The following variables are not quantitative: target266 
The following variables are not quantitative: target515 
The following variables are not quantitative: target530 
The following variables are not quantitative: target587 
The following variables are not quantitative: target620 
The following variables are not quantitative: target730 
The following variables are not quantitative: target739 
The following variables are not quantitative: target801 
The following variables are not quantitative: target803 
The following variables are not quantitative: target809 
The following variables are not quantitative: target819 
The following variables are not quantitative: target868 
The following variables a 
In addition: There were 50 or more warnings (use warnings() to see the first 50) 
+1

Я мог бы быть неправильно, но я подозреваю, что 97E + 05 делает трюк. Проверьте записи, содержащие такие вещи, которые не являются цифрами. Вы экспортируете CSV? –

+0

@ sebastian-c Теперь я удалил все значения с помощью «E» в файле (например, -1,97E + 05). Я все равно получаю ту же ошибку. Я экспортировал ее как «текстовую вкладку с разделителями». Другое дело, что, проверьте разницу в значениях с переменной1 и переменной2. Количественные переменные являются короткими, а не количественные - длинными. – Letin

+0

Как ваши данные поступают из Excel в R? Это фактор, который у вас есть в переменной2. – themel

ответ

0

R рассматривает переменные как факторы, как было упомянуто Арун. Поэтому он делает data.frame (который на самом деле является списком). Существует множество способов решения этой проблемы: можно было бы преобразовать ее в матрицу данных следующим образом;

matrix <- as.numeric(as.matrix(data)) 
dim(matrix) <- dim(data) 

Теперь вы можете запустить свой PCA на матрице.

Edit:

Продолжая пример немного, то вторая часть предложения ЧАРЛИ не будет работать. Скопируйте следующий сеанс и посмотрите, как он работает;

d <- data.frame(
a = factor(runif(2000)), 
b = factor(runif(2000)), 
c = factor(runif(2000))) 

as.numeric(d) #does not work on a list (data frame is a list) 

as.numeric(d$a) # does work, because d$a is a vecor, but this is not what you are 
# after. R converts the factor levels to numeric instead of the actual value. 

(m <- as.numeric(as.matrix(d))) # this does the rigth thing 
dim(m)      # but m loses the dimensions and is now a vector 

dim(m) <- dim(d)    # assign the dimensions of d to m 

svd(m)      # you can do the PCA function of your liking on m 
+0

Спасибо Эдвину. Позвольте мне попробовать это и вернуться. Я просто тратил время на повторный анализ моего файла и возвращение с конкретными ошибками. А также предоставит ссылку на мой файл. Позвольте мне вернуться через несколько минут, чтобы сказать, работает ли это. – Letin

0

По умолчанию R коэрцирует строки к факторам. Это может привести к неожиданному поведению. Выключите опцию по умолчанию это с:

 read.csv(x, stringsAsFactors=F) 

Вы можете, в качестве альтернативы, принуждать факторы, числовая с

 newVar<-as.numeric(oldVar) 
+0

Эй, Чарли, спасибо за ваш ответ. Но здесь сказано, что file_new <- as.numeric (file) Ошибка: (list) объект не может быть принужден к типу 'double' – Letin

+0

Вы получаете эту ошибку, поскольку объект 'file_new' создается с помощью dataframe класса, поскольку некоторые переменные являются числовыми, а некоторые являются символами. (проверьте с помощью 'class (file_new)') –

+0

Вы правы. Я должен был быть яснее. Вы не можете принудить весь блок данных. И, как правильно указывает Эдвин, вы, возможно, не захотите. По моему опыту, преобразование по умолчанию в факторы read.table() может вызвать головные боли. Я установил мой редактор для ввода «stringsAsFactor = FALSE» по умолчанию. – charlie