UseMethod ("тип") ошибка; нет применимого метода для 'type', примененного к объекту класса «c ('double', 'numeri c')» - PullRequest
0 голосов
/ 28 мая 2020

В кадре данных у меня есть столбец с числовыми c значениями и некоторыми смешанными символьными данными для некоторых строк. Я хочу удалить все строки с символьными данными и сохранить эти строки с числовым значением. У меня df составляет 6 миллионов строк, поэтому я просто создал небольшой объект, чтобы попытаться решить мою проблему, а затем реализовать в более крупном масштабе.

Вот что я сделал:

a <- c("fruit", "love", 53)

b <- str_replace_all("^[:alpha:]", 0)

Читая здесь ответы на другие ошибки UseMethod (о факторах), я попытался заменить «a» на as.character (a) и попытаться «б» снова. Но я получаю ту же ошибку. Я пытаюсь просто превратить любое значение alphabeti c в число ноль, и я новичок во всем этом.

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Здесь есть несколько проблем, даже в этих двух строках кода. Во-первых, a - это вектор символов, потому что его первый элемент - это символ. Это означает, что ваш numeri c 53 преобразован в символ.

> print(a)
[1] "fruit" "love"  "53" 

У вас неправильный синтаксис для str_replace_all. См. Документацию, чтобы узнать, как правильно его использовать. Но это не то, что вам здесь нужно, потому что вам нужны числа.

Первое, что вам нужно сделать, это преобразовать a в числа c. Грубый способ сделать это - просто

>b <- as.numeric(a)
Warning message:
NAs introduced by coercion b
> b
[1] NA NA 53

А затем подмножество, включающее только числовые c значения в b:

> b <- b[!is.na(b)]
> b
[1] 53

Но хотите ли вы этого делать с фреймом данных 6 миллионов строк - другое дело. Пожалуйста, подумайте, что именно вы хотели бы сделать, предоставьте нам более точные тестовые данные и задайте свой вопрос еще раз.

0 голосов
/ 28 мая 2020

Вероятно, есть более эффективный способ сделать это для большого фрейма данных (например, что-то по столбцам, а не по строкам), но чтобы ответить на ваш конкретный c вопрос по каждой строке a:

as.numeric(stringr::str_replace_all(a, "[a-z]+", "0"))

Обратите внимание, что заменяющее значение должно быть символом (последний аргумент в вызове функции, "0"). (Вы можете найти документацию на своей R-консоли: ?stringr::str_replace_all)

...