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"
Другие вопросы по тегам