R: преобразовать список чисел из букв в цифры
У меня в столбце данных есть столбец, в котором в каждой ячейке есть одно или несколько чисел. Если чисел много, они разделяются пробелом. Кроме того, R рассматривает их как символьный вектор. Мне бы очень хотелось преобразовать их в числовые (и, если возможно, сразу их сложить). Например, одна из моих клеток может выглядеть
6 310 21 20 64
я пробовал
Reduce(sum,L)
а также
as.numeric(L)
но я всегда получаю предупреждение:
НС введены по принуждению
Здесь L - просто образец объекта, который я создал, чтобы поместить одну из моих клеток.
3 ответа
После моего комментария, вот решение с использованием sapply
:
sum(as.numeric(strsplit("6 310 21 20 64",' ')[[1]]))
который для столбца dataframe даст что-то вроде этого:
sapply(1:nrow(df),function(x){sum(as.numeric(strsplit(str1,' ')[[x]]))})
# 421 421 421
который может быть улучшен в sapply(strsplit(str1,' '), function(x) sum(type.convert(x)))
Спасибо предложению Дэвида Аренбурга.
Вот еще два варианта, которые корректно работают с вектором (кажется)
str1 <- c("6 310 21 20 64", "6 310 21 20 64","6 310 21 20 64")
rowSums(read.table(text = str1))
## [1] 421 421 421
Или используя data.table::fread
rowSums(data.table::fread(paste(str1, collapse = "\n")))
# [1] 421 421 421
Или, как упоминалось в комментариях @akrun, вы можете использовать Reduce(`+`,...)
вместо rowSums(...)
в обоих случаях, чтобы избежать marix
преобразование
Мы можем использовать scan
sum(scan(text=str1, what=numeric(), quiet=TRUE))
#[1] 421
данные
str1 <- "6 310 21 20 64"