Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R convert large character string to dataframe

I am having trouble converting a large text string to a dataframe. I've been unable to figure this simple task out yet. Hoping for your help.

x <- "1 apple 200 blueberry 3000 pear 4400 raspberry"

I'd like to convert this to a dataframe that looks like this:

id    name
1     apple
200   blueberry
30000 pear
4400  raspberrry
like image 320
Tom O Avatar asked Dec 10 '16 13:12

Tom O


2 Answers

We can use gsub with read.table

read.table(text=gsub("(?<=[a-z])\\s+", "\n", x, perl=TRUE), 
            header=FALSE, col.names = c("id", "name"))
#    id      name
#1    1     apple
#2  200 blueberry
#3 3000      pear
#4 4400 raspberry

Or with fread

library(data.table)
fread(gsub("(?<=[a-z])\\s+", "\n", x, perl=TRUE), col.names = c("id", "name"))

Or this would also work without the gsub by specifying the col.names with read.table

read.table(text=x,col.names=c('ID','Name'))
#    ID      Name
#1    1     apple
#2  200 blueberry
#3 3000      pear
#4 4400 raspberry
like image 91
akrun Avatar answered Nov 06 '22 08:11

akrun


Try this:

r <- unlist(strsplit(x, " "))
data.frame(id=as.numeric(r[c(TRUE,FALSE)]), name=r[c(FALSE,TRUE)])

#    id      name
#1    1     apple
#2  200 blueberry
#3 3000      pear
#4 4400 raspberry
like image 7
989 Avatar answered Nov 06 '22 09:11

989