I have a (fairly long) list of vectors. The vectors consist of Russian words that I got by using the strsplit()
function on sentences.
The following is what head()
returns:
[[1]]
[1] "модно" "создавать" "резюме" "в" "виде"
[[2]]
[1] "ты" "начианешь" "работать" "с" "этими"
[[3]]
[1] "модно" "называть" "блогер-рилейшенз" "―" "начинается" "задолго"
[[4]]
[1] "видел" "по" "сыну," "что" "он"
[[5]]
[1] "четырнадцать," "я" "поселился" "на" "улице"
[[6]]
[1] "широко" "продолжали" "род."
Note the vectors are of different length.
What I want is to be able to read the first words from each sentence, the second word, the third, etc.
The desired result would be something like this:
P1 P2 P3 P4 P5 P6
[1] "модно" "создавать" "резюме" "в" "виде" NA
[2] "ты" "начианешь" "работать" "с" "этими" NA
[3] "модно" "называть" "блогер-рилейшенз" "―" "начинается" "задолго"
[4] "видел" "по" "сыну," "что" "он" NA
[5] "четырнадцать," "я" "поселился" "на" "улице" NA
[6] "широко" "продолжали" "род." NA NA NA
I have tried to just use data.frame()
but that didn't work because the rows are of different length. I also tried rbind.fill()
from the plyr
package, but that function can only process matrices.
I found some other questions here (that's where I got the plyr
help from), but those were all about combining for instance two data frames of different size.
Thanks for your help.
try this:
the trick is, that,
returns the vector + two NAs
you could also use
rbindlist()
from data.table-package.Convert vectors to data.table or data.frame and transpose it (not sure if this reduces speed a lot) with the help of
lapply()
. Then bind them withrbindlist()
- filling missing cells with NA:Another option could be to define a function like this (it'd mimic
rbind.fill
) or use it directly fromrowr
package:Regards
You can do something like this :
Which gives :
Another option is
stri_list2matrix
fromlibrary(stringi)
NOTE: Data from @juba's post.
Or as @Valentin mentioned in the comments
One liner with
plyr