Преобразование текста в число, а затем умножение ошибок в R - PullRequest
0 голосов
/ 29 января 2020

У меня есть три фрейма данных, каждый с одним столбцом и одинаковой длины со следующими данными примера:

df1 = c(1, 2, 3)
df2 = c('a', 'b', 'a')
df3 = c(2, 3, 4)

Я конвертирую все значения "a" в df2 в 100 и все значения "b" в df2 в -100, используя следующий код:

df2[df2 == "a"] <- as.numeric(100)
df2[df2 == "b"] <- as.numeric(-100)

Затем я создаю df4, умножая df1, df2 и df3, используя этот код:

df4 <- (df1 * df2 * df3)

Однако я получаю следующую ошибку:

Error in FUN(left, right) : non-numeric argument to binary operator

Что я делаю не так? Я могу умножать df1 и df3 без проблем, только когда я добавляю df2, возникает проблема. Если я посмотрю на среднее значение df2, то получу, что среднее значение равно «NA_real_», ​​что заставляет меня поверить, что мои численные значения c не рассматриваются как числа. Спасибо!

Ответы [ 2 ]

3 голосов
/ 29 января 2020

Это не работает, потому что вы меняете значение df2 одно за другим и, следовательно, до тех пор, пока в нем есть символьное значение, каждое значение цифры c устанавливается в виде символа в векторе.

Вот исправление вашего кода, где я изменяю весь вектор в цифре c после вашего преобразования

df1 = c(1, 2, 3)
df2 = c('a','b', 'a')
df3 = c(2, 3, 4)

df2[df2 == "a"] <- as.numeric(100)
df2[df2 == "b"] <- as.numeric(-100)

df2 ; class(df2)
# [1] "100"  "-100" "100" 
# [1] "character"
df2 = as.numeric(df2)
df2 ; class(df2)
# [1]  100 -100  100
# [1] "numeric"

df4 <- (df1 * df2 * df3)
1 голос
/ 29 января 2020

Дело в том, что вы конвертируете в цифру c только один элемент за раз в символьном векторе, поэтому вы не можете иметь 2 разных типа элементов внутри одного вектора, и он остается символьным типом.

df2 <- as.numeric(df2)
df4 <- (df1 * df2 * df3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...