R: convert list of numbers from character to numeric

霸气de小男生 提交于 2019-12-02 08:33:21

问题


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 character vector. I'd really like to convert them to numeric (and if possible sum them up right away). E.g. one of my cells might look like

6 310 21 20 64

I've tried

Reduce(sum,L)

and

as.numeric(L)

but I always get Warning message:

NAs introduced by coercion

Here, L is just a sample object I created to put one of my cells into.


回答1:


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.




回答2:


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




回答3:


We can use scan

sum(scan(text=str1, what=numeric(), quiet=TRUE))
#[1] 421

data

str1 <- "6 310 21 20 64"


来源:https://stackoverflow.com/questions/34016327/r-convert-list-of-numbers-from-character-to-numeric

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!