Содержание
- Невозможно принудительно перейти к таблице при выполнении корреляции
- ‘x’ должен быть числовым вектором: ошибка из данных. кадр чисел
- 2 ответы
Невозможно принудительно перейти к таблице при выполнении корреляции
У меня есть данные списка 33 строк, как показано ниже:
И я использовал приведенный ниже код для создания коэффициента корреляции:
Однако я получаю ту же ошибку:
Error in cor(mpg, method = «pearson», use = «complete.obs») : ‘x’ must be numeric
И я использовал typeof (mpg.df), результат все еще был «список».
Любые предложения будут высоко оценены .
Вероятно, что в вашем примере фрейма данных один или несколько столбцов не являются числовыми. Поскольку ваш пример фрейма данных выглядит как подмножество предопределенного фрейма данных mtcars в R, я просто создам это подмножество в R следующим образом.
Теперь взгляните на структуру mtcars2 , вы увидите, что все столбцы числовые.
Поскольку все столбцы числовые, мы можем использовать функцию cor для проведения корреляционного анализа.
Спасибо и извините, я могу войти в систему, чтобы проверить это сегодня. Я вспомнил, что набор данных «mtcars» — это сам фрейм данных. Что делать, если у меня есть набор данных, который представляет собой «список»? Будет ли работать ваше первое подмножество? потому что функция «Corr» может применяться только к матрице или фрейму данных, в зависимости от того, что я искал. Если подмножество по-прежнему является списком (typeof () = list), могу ли я использовать этот способ для создания корреляции? Спасибо большое!!
@ Jen-LiChen Первым аргументом функции cor должна быть матрица или фрейм данных. Однако преобразование списка во фрейм данных не составит для вас проблемы. Если вы наберете typeof(mtcars) , вы заметите, что mtcars — это не только фрейм данных, но и список. Фактически, фрейм данных в R представляет собой список.
Источник
‘x’ должен быть числовым вектором: ошибка из данных. кадр чисел
Я запускаю cor.test для двух столбцов в файле / таблице.
Но я получаю эту сбивающую с толку ошибку .
значения в столбцах ЯВЛЯЮТСЯ числами, но
каковы результаты str(colA) и str(colB) . Я предполагаю, что данные были прочитаны как факторы или символьные данные, вероятно, потому, что в данных, которые вы читаете, есть ошибочный символ. — Chase
@Chase: Я поддержал ваш комментарий, но потом понял, что проблема не в этом (см. Оба ответа ниже). Оглядываясь назад, я думаю, что это немного вводит в заблуждение, но я не могу удалить свой голос за . — Ben Bolker
@Ben и @Chase: совет, который нужно дать str результаты все же хорошие. (Я дал второй положительный голос). — Aaron left Stack Overflow
2 ответы
Поставьте запятую перед селектором. Когда вы выбираете в объекте data.frame с одной индексирующей переменной без запятой, он извлекает столбец как тип сохранения элемента списка. Следовательно, это все еще data.frame. Но объекты data.frame позволяют вам выбирать, используя нотацию матричного стиля, и тогда вы получите простой вектор. Так что просто измени
Я думаю, что это больше соответствует духу типа data.frame, чем двойная скобка ( [[ ), которые будут делать нечто подобное, но в духе базового типа списка. Они также не связаны с отдельными селекторами элементов и строк. Итак, в коде, который выполняет различные действия с data.frame, селекторы с двойными скобками выделяются как нечто странное.
ответ дан 04 окт ’11, 20:10
это работает так же, как и мое решение выше. Интересно, а бывают ли случаи, когда они ведут себя по-другому . — Бен Болкер
Пытаться tmp[[compareA]] и tmp[[compareB]] вместо одинарных скобок. Вы хотели извлечь числовые векторы, вместо этого вы извлекли фреймы данных с одним столбцом. Сравните следующее:
Попробуйте это с cor.test :
Одиночные скобки: ошибка, как указано выше.
Двойные скобки: работает.
Как отмечает @Aaron ниже, cor будет нормально обрабатывать кадры данных с одним столбцом, преобразовывая их в матрицы, но cor.test нет. (Это может быть поднято на r-devel@r-project.org , или ?? отправлено в систему отслеживания ошибок R как элемент списка желаний . )
ответ дан 23 мая ’17, 12:05
Хотя это делает код более понятным, cor преобразует кадры данных в матрицы, поэтому результат должен быть таким же, как у кода OP. — Аарон покинул Stack Overflow
Я недостаточно внимательно читал; OP использует cor.test , который не выполняет это преобразование. Я подозреваю, что вы правы. — Аарон покинул Stack Overflow
Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками r dataframe or задайте свой вопрос.
Источник
I know that this question has been asked before but not in the context i am asking it now.
I have a dataframe that looks like this
year Units
1 2005-2007 0.082
2 2008-2010 0.411
3 2011-2013 1.258
my simple code looks like this
Year = mydata$year
Units = mydata$Units
cor.test(mydataRyear, mydata$Units, type=pearson)
when i run the code i get the error
Error in cor.test.default(mydata$year, mydata$Units, type = pearson) : 'x' must be a numeric vector
your comments and suggestions are highly welcomed
asked Apr 19, 2017 at 13:26
2
year
is not a numeric value — it will be either a character string or a factor. Check with str(mydata)
.
You could turn it into a numeric value by e.g. as.numeric(substr(mydata$year,1,4))
or by using the factor levels as.numeric(as.factor(mydata$year))
— although check the ordering makes sense if you use the latter.
answered Apr 19, 2017 at 16:00
Andrew GustarAndrew Gustar
16.6k1 gold badge21 silver badges32 bronze badges
Вероятно, что в вашем примере фрейма данных один или несколько столбцов не являются числовыми. Поскольку ваш пример фрейма данных выглядит как подмножество предопределенного фрейма данных mtcars в R, я просто создам это подмножество в R следующим образом.
# Select some columns
mtcars2 <- mtcars[, c("mpg", "cyl", "disp", "hp", "drat", "wt")]
# View the first six rows
head(mtcars2)
# mpg cyl disp hp drat wt
# Mazda RX4 21.0 6 160 110 3.90 2.620
# Mazda RX4 Wag 21.0 6 160 110 3.90 2.875
# Datsun 710 22.8 4 108 93 3.85 2.320
# Hornet 4 Drive 21.4 6 258 110 3.08 3.215
# Hornet Sportabout 18.7 8 360 175 3.15 3.440
# Valiant 18.1 6 225 105 2.76 3.460
Теперь взгляните на структуру mtcars2, вы увидите, что все столбцы числовые.
# Show the class of each column
str(mtcars2)
# 'data.frame': 32 obs. of 6 variables:
# $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
# $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
# $ disp: num 160 160 108 258 360 ...
# $ hp : num 110 110 93 110 175 105 245 62 95 123 ...
# $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
# $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
Поскольку все столбцы числовые, мы можем использовать функцию cor для проведения корреляционного анализа.
# Do correlation analysis
cor(mtcars2)
# mpg cyl disp hp drat wt
# mpg 1.0000000 -0.8521620 -0.8475514 -0.7761684 0.6811719 -0.8676594
# cyl -0.8521620 1.0000000 0.9020329 0.8324475 -0.6999381 0.7824958
# disp -0.8475514 0.9020329 1.0000000 0.7909486 -0.7102139 0.8879799
# hp -0.7761684 0.8324475 0.7909486 1.0000000 -0.4487591 0.6587479
# drat 0.6811719 -0.6999381 -0.7102139 -0.4487591 1.0000000 -0.7124406
# wt -0.8676594 0.7824958 0.8879799 0.6587479 -0.7124406 1.0000000
Попробуйте tmp[[compareA]]
и tmp[[compareB]]
вместо одиночных скобок. Вы хотели извлечь числовые векторы, вместо этого вы должны были извлечь кадры данных из одного столбца. Сравните следующее:
> z <- data.frame(a=1:5,b=1:5)
> str(z["a"])
'data.frame': 5 obs. of 1 variable:
$ a: int 1 2 3 4 5
> is.numeric(z["a"])
[1] FALSE
> str(z[["a"]])
int [1:5] 1 2 3 4 5
> is.numeric(z[["a"]])
[1] TRUE
Попробуйте это с помощью cor.test
:
Отдельные скобки: ошибка, как указано выше.
> cor.test(z["a"],z["b"])
Error in cor.test.default(z["a"], z["b"]) : 'x' must be a numeric vector
Двойные скобки: работает.
> cor.test(z[["a"]],z[["b"]])
Pearson product-moment correlation
data: z[["a"]] and z[["b"]]
[snip snip snip]
Как указывает @Aaron ниже, cor
будет обрабатывать кадры данных с одним столбцом отлично, преобразовывая их в матрицы, но cor.test
этого не делает. (Это может быть r-devel@r-project.org
на r-devel@r-project.org
или отправлено в R-трекер r-devel@r-project.org
качестве элемента списка пожеланий…)
См. Также: Числовой столбец в data.frame, возвращающий «num» с помощью str(), но не is.numeric(). Какая самая большая R-gotcha, с которой вы столкнулись? (возможно, другие)
Пытаться tmp[[compareA]]
и tmp[[compareB]]
вместо одинарных скобок. Вы хотели извлечь числовые векторы, вместо этого вы извлекли фреймы данных с одним столбцом. Сравните следующее:
> z <- data.frame(a=1:5,b=1:5)
> str(z["a"])
'data.frame': 5 obs. of 1 variable:
$ a: int 1 2 3 4 5
> is.numeric(z["a"])
[1] FALSE
> str(z[["a"]])
int [1:5] 1 2 3 4 5
> is.numeric(z[["a"]])
[1] TRUE
Попробуйте это с cor.test
:
Одиночные скобки: ошибка, как указано выше.
> cor.test(z["a"],z["b"])
Error in cor.test.default(z["a"], z["b"]) : 'x' must be a numeric vector
Двойные скобки: работает.
> cor.test(z[["a"]],z[["b"]])
Pearson's product-moment correlation
data: z[["a"]] and z[["b"]]
[snip snip snip]
Как отмечает @Aaron ниже, cor
будет нормально обрабатывать кадры данных с одним столбцом, преобразовывая их в матрицы, но cor.test
нет. (Это может быть поднято на r-devel@r-project.org
, или ?? отправлено в систему отслеживания ошибок R как элемент списка желаний …)
См. также: Числовой столбец в data.frame, возвращающий «num» с помощью str (), но не is.numeric () , Какой самый большой R-gotcha, с которым вы столкнулись? (может быть, другие)
#r #matrix #correlation
#r #матрица #взаимосвязь
Вопрос:
В R у меня возникли проблемы с созданием корреляционной матрицы для моих данных. Я продолжаю сталкиваться с этой проблемой: «Ошибка в cor(mydata):» x «должно быть числовым», и я не знаю, как это исправить.
gt; mydata lt;- Combo[, c(1,2,3,4,5,6,7)] gt; head(mydata, 13) gt; #computing matrix gt; corrmax = cor(mydata) **Error in cor(mydata) : 'x' must be numeric** gt;
Комментарии:
1.
Site
,Unemployment
иBelow.Poverty
не являются числовыми, так как в них есть символы, отсюда и ошибка. Вы можете опустить эти переменные или преобразовать последние две в числовые, удалив%
и преобразовав. Вам придется опуститьSite
переменную2. … также вам, вероятно, придется иметь дело с
NA
; см. страницу справки?cor
для стратегий
Ответ №1:
Я считаю, что не все данные mydata
являются числовыми. Вы можете проверить это, выполнив команду: str(mydata)
или sapply(mydata, is.numeric)
.
Если есть переменные в mydata
этом chr
или других нечисловых форматах или FALSE
в случае возврата sapply
, вам нужно будет преобразовать их в числовые перед выполнением команды или быть более избирательным в отношении набора переменных, для которых вы вычисляете корреляцию. Я вижу строки и знаки процента в том, что вы опубликовали. Строки необходимо будет удалить, а отформатированные проценты (%) преобразовать в числовое представление (десятичные дроби).
In R, I have been having trouble trying to create a correlation matrix for my data. I keep running into this problem: «Error in cor(mydata) : ‘x’ must be numeric» and I don’t know how to fix it.
> mydata <- Combo[, c(1,2,3,4,5,6,7)]
> head(mydata, 13)
> #computing matrix
> corrmax = cor(mydata)
**Error in cor(mydata) : 'x' must be numeric**
>
asked Nov 28, 2021 at 23:42
2
I believe not all the data in mydata
are numeric. You can test this by running: str(mydata)
or sapply(mydata, is.numeric)
.
If there are variables in mydata
that are chr
or other non-numeric formats or return FALSE
in the case of sapply
, you will need to convert them to numeric before running the command or be more selective about the set of variables for which you calculate a correlation. I see strings and percent signs in what you posted. The strings will need to be removed and the formatted percents (%) converted to a numeric representation (decimals).
answered Nov 28, 2021 at 23:52
In R, I have been having trouble trying to create a correlation matrix for my data. I keep running into this problem: «Error in cor(mydata) : ‘x’ must be numeric» and I don’t know how to fix it.
> mydata <- Combo[, c(1,2,3,4,5,6,7)]
> head(mydata, 13)
> #computing matrix
> corrmax = cor(mydata)
**Error in cor(mydata) : 'x' must be numeric**
>
asked Nov 28, 2021 at 23:42
2
I believe not all the data in mydata
are numeric. You can test this by running: str(mydata)
or sapply(mydata, is.numeric)
.
If there are variables in mydata
that are chr
or other non-numeric formats or return FALSE
in the case of sapply
, you will need to convert them to numeric before running the command or be more selective about the set of variables for which you calculate a correlation. I see strings and percent signs in what you posted. The strings will need to be removed and the formatted percents (%) converted to a numeric representation (decimals).
answered Nov 28, 2021 at 23:52