élément - remplir un vecteur r




Comment convertir une liste de vecteurs de différentes longueurs en une trame de données utilisable en R? (4)

J'ai une liste (assez longue) de vecteurs. Les vecteurs sont des mots russes que j'ai obtenus en utilisant la fonction strsplit() sur les phrases.

Voici ce que head() renvoie:

[[1]]
[1] "модно"     "создавать" "резюме"    "в"         "виде"     

[[2]]
[1] "ты"        "начианешь" "работать"  "с"         "этими"    

[[3]]
[1] "модно"            "называть"         "блогер-рилейшенз" "―"                "начинается"       "задолго"         

[[4]]
[1] "видел" "по"    "сыну," "что"   "он"   

[[5]]
[1] "четырнадцать," "я"             "поселился"     "на"            "улице"        

[[6]]
[1] "широко"     "продолжали" "род."

Notez que les vecteurs sont de longueur différente.

Ce que je veux, c'est pouvoir lire les premiers mots de chaque phrase, le deuxième mot, le troisième, etc.

Le résultat souhaité serait quelque chose comme ceci:

    P1              P2           P3                 P4    P5           P6
[1] "модно"         "создавать"  "резюме"           "в"   "виде"       NA
[2] "ты"            "начианешь"  "работать"         "с"   "этими"      NA
[3] "модно"         "называть"   "блогер-рилейшенз" "―"   "начинается" "задолго"         
[4] "видел"         "по"         "сыну,"            "что" "он"         NA
[5] "четырнадцать," "я"          "поселился"        "на"  "улице"      NA
[6] "широко"        "продолжали" "род."             NA    NA           NA

J'ai essayé de simplement utiliser data.frame() mais cela n'a pas fonctionné car les lignes sont de longueur différente. J'ai aussi essayé rbind.fill() du paquet plyr , mais cette fonction ne peut traiter que des matrices.

J'ai trouvé d'autres questions ici (c'est de là que j'ai reçu l'aide de plyr ), mais il s'agissait de combiner, par exemple, deux plyr de données de taille différente.

Merci de votre aide.


Un liner avec plyr

plyr::ldply(word.list, rbind)

Une autre option est stri_list2matrix from library(stringi)

library(stringi)
stri_list2matrix(l, byrow=TRUE)
#    [,1] [,2] [,3] [,4]
#[1,] "a"  "b"  "c"  NA  
#[2,] "a2" "b2" NA   NA  
#[3,] "a3" "b3" "c3" "d3"

REMARQUE: Données de la publication de @ juba.

Ou comme @Valentin mentionné dans les commentaires

sapply(l, "length<-", max(lengths(l)))

Vous pouvez faire quelque chose comme ça:

## Example data
l <- list(c("a","b","c"), c("a2","b2"), c("a3","b3","c3","d3"))
## Compute maximum length
max.length <- max(sapply(l, length))
## Add NA values to list elements
l <- lapply(l, function(v) { c(v, rep(NA, max.length-length(v)))})
## Rbind
do.call(rbind, l)

Qui donne :

     [,1] [,2] [,3] [,4]
[1,] "a"  "b"  "c"  NA  
[2,] "a2" "b2" NA   NA  
[3,] "a3" "b3" "c3" "d3"

essaye ça:

word.list <- list(letters[1:4], letters[1:5], letters[1:2], letters[1:6])
n.obs <- sapply(word.list, length)
seq.max <- seq_len(max(n.obs))
mat <- t(sapply(word.list, "[", i = seq.max))

le truc c'est que,

c(1:2)[1:4]

renvoie le vecteur + deux NA





dataframe