Error in cor rdat method pearson x должен быть числом

Невозможно принудительно перейти к таблице при выполнении корреляции У меня есть данные списка 33 строк, как показано ниже: И я использовал приведенный ниже код для создания коэффициента корреляции: Однако я получаю ту же ошибку: Error in cor(mpg, method = «pearson», use = «complete.obs») : ‘x’ must be numeric И я использовал typeof (mpg.df), результат […]

Содержание

  1. Невозможно принудительно перейти к таблице при выполнении корреляции
  2. ‘x’ должен быть числовым вектором: ошибка из данных. кадр чисел
  3. 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

tom sawyer's user avatar

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 Gustar's user avatar

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

enter image description here

asked Nov 28, 2021 at 23:42

Eva Frankovic's user avatar

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

matheki's user avatar

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

enter image description here

asked Nov 28, 2021 at 23:42

Eva Frankovic's user avatar

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

matheki's user avatar

Понравилась статья? Поделить с друзьями:
  • Error in connection establishment net err connection refused
  • Error in conflict multiple assets emit different content to the same filename index html
  • Error in configuration process project files may be invalid cmake opencv
  • Error in communication with engine kerio control
  • Error in command syntax check command help