Как изменить переменные в количественные?

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

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

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

> 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)

3 ответа

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

      read.csv(x, stringsAsFactors=F)

В качестве альтернативы вы можете привести числовые коэффициенты к

      newVar<-as.numeric(oldVar)

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

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

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

Редактировать:

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

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

as.numeric(as.character(data$variable2[1:5])), использовать as.character чтобы сначала получить строковое представление меток факторной переменной, а затем преобразовать их с помощью as.numeric

Другие вопросы по тегам