我有一个(相当长的)矢量列表。这些向量由我在句子上使用strsplit()
函数得到的俄语单词组成。
以下是head()
返回的内容:
[[1]]
[1] "модно" "создавать" "резюме" "в" "виде"
[[2]]
[1] "ты" "начианешь" "работать" "с" "этими"
[[3]]
[1] "модно" "называть" "блогер-рилейшенз" "―" "начинается" "задолго"
[[4]]
[1] "видел" "по" "сыну," "что" "он"
[[5]]
[1] "четырнадцать," "я" "поселился" "на" "улице"
[[6]]
[1] "широко" "продолжали" "род."
注意向量的长度不同。
我想要的是能够阅读每个句子,第二个单词,第三个单词等的第一个单词。
期望的结果将是这样的:
P1 P2 P3 P4 P5 P6
[1] "модно" "создавать" "резюме" "в" "виде" NA
[2] "ты" "начианешь" "работать" "с" "этими" NA
[3] "модно" "называть" "блогер-рилейшенз" "―" "начинается" "задолго"
[4] "видел" "по" "сыну," "что" "он" NA
[5] "четырнадцать," "я" "поселился" "на" "улице" NA
[6] "широко" "продолжали" "род." NA NA NA
我曾尝试使用data.frame()
,但这不起作用,因为行的长度不同。我还尝试了rbind.fill()
包中的plyr
,但该函数只能处理矩阵。
我在这里找到了一些其他问题(这是我获得plyr
帮助的地方),但这些都是关于组合两个不同大小的数据帧。
感谢您的帮助。
答案 0 :(得分:72)
一张plyr
plyr::ldply(word.list, rbind)
答案 1 :(得分:34)
试试这个:
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))
诀窍是,
c(1:2)[1:4]
返回向量+两个NAs
答案 2 :(得分:11)
另一个选项是来自<div class="col">
</div>
<div class="col">
<div class="navigation">
<ul>
<li><a href="#">punkt</a>
<div class="content">lorem ipsum</div>
</li>
</ul>
</div>
</div>
stri_list2matrix
library(stringi)
注意:来自@ juba&post文章的数据。
或者@Valentin在评论中提到
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"
答案 3 :(得分:10)
您可以这样做:
## 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)
给出了:
[,1] [,2] [,3] [,4]
[1,] "a" "b" "c" NA
[2,] "a2" "b2" NA NA
[3,] "a3" "b3" "c3" "d3"
答案 4 :(得分:4)
您也可以使用data.table-package中的rbindlist()
。
在lapply()
的帮助下,将向量转换为data.table或data.frame并对其进行转置(不确定这是否会大幅降低速度)。然后用rbindlist()
绑定它们 - 用NA填充缺失的细胞:
l = list(c("a","b","c"), c("a2","b2"), c("a3","b3","c3","d3"))
dt = rbindlist(lapply(l, function(x) data.table(t(x))),
fill = TRUE)
答案 5 :(得分:0)
另一种选择可能是定义这样的函数(模仿rbind.fill
)或直接从rowr
包中使用它:
cbind.fill <- function(...){
nm <- list(...)
nm <- lapply(nm, as.matrix)
n <- max(sapply(nm, nrow))
do.call(cbind, lapply(nm, function (x)
rbind(x, matrix(, n-nrow(x), ncol(x)))))
}
致谢