I have a column in my dataframe where in every cell there are one or more numbers. If there are many numbers, they are seperated with a space. Furthermore, R considers them as a
Here are two more options which work correctly on a vector (it seems)
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
Or using data.table::fread
rowSums(data.table::fread(paste(str1, collapse = "\n")))
# [1] 421 421 421
Or as mentioned in comments by @akrun, you can use Reduce(`+`,...)
instead of rowSums(...)
in both cases in order to avoid to marix
conversion
Following my comment, here is a solution using sapply
:
sum(as.numeric(strsplit("6 310 21 20 64",' ')[[1]]))
which for the column of the dataframe will give something like this:
sapply(1:nrow(df),function(x){sum(as.numeric(strsplit(str1,' ')[[x]]))})
# 421 421 421
which could be improved in sapply(strsplit(str1,' '), function(x) sum(type.convert(x)))
, thanks to David Arenburg's suggestion.
We can use scan
sum(scan(text=str1, what=numeric(), quiet=TRUE))
#[1] 421
str1 <- "6 310 21 20 64"