Ico*_*Ico 46 r vector dataframe
我有一个(相当长的)矢量列表.这些向量由我使用strsplit()句子函数得到的俄语单词组成.
以下是head()返回的内容:
[[1]]
[1] "?????" "?????????" "??????" "?" "????"
[[2]]
[1] "??" "?????????" "????????" "?" "?????"
[[3]]
[1] "?????" "????????" "??????-?????????" "?" "??????????" "???????"
[[4]]
[1] "?????" "??" "????," "???" "??"
[[5]]
[1] "????????????," "?" "?????????" "??" "?????"
[[6]]
[1] "??????" "??????????" "???."
Run Code Online (Sandbox Code Playgroud)
注意,矢量具有不同的长度.
我想要的是能够阅读每个句子,第二个单词,第三个单词等的第一个单词.
期望的结果将是这样的:
P1 P2 P3 P4 P5 P6
[1] "?????" "?????????" "??????" "?" "????" NA
[2] "??" "?????????" "????????" "?" "?????" NA
[3] "?????" "????????" "??????-?????????" "?" "??????????" "???????"
[4] "?????" "??" "????," "???" "??" NA
[5] "????????????," "?" "?????????" "??" "?????" NA
[6] "??????" "??????????" "???." NA NA NA
Run Code Online (Sandbox Code Playgroud)
我试图使用,data.frame()但由于行的长度不同而无效.我也试过rbind.fill()了这个plyr包,但是这个函数只能处理矩阵.
我在这里找到了一些其他问题(这是我得到plyr帮助的地方),但这些都是关于组合两个不同大小的数据帧.
谢谢你的帮助.
Ram*_*ath 79
一个班轮用 plyr
plyr::ldply(word.list, rbind)
Run Code Online (Sandbox Code Playgroud)
adi*_*der 39
试试这个:
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))
Run Code Online (Sandbox Code Playgroud)
诀窍是,那,
c(1:2)[1:4]
Run Code Online (Sandbox Code Playgroud)
返回向量+两个NA
akr*_*run 13
另一种选择是stri_list2matrix来自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"
Run Code Online (Sandbox Code Playgroud)
注意:来自@ juba的帖子的数据.
或者@Valentin在评论中提到
sapply(l, "length<-", max(lengths(l)))
Run Code Online (Sandbox Code Playgroud)
jub*_*uba 12
你可以这样做:
## 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)
Run Code Online (Sandbox Code Playgroud)
这使 :
[,1] [,2] [,3] [,4]
[1,] "a" "b" "c" NA
[2,] "a2" "b2" NA NA
[3,] "a3" "b3" "c3" "d3"
Run Code Online (Sandbox Code Playgroud)
您也可以rbindlist()从data.table包中使用。
将向量转换为data.tables 或data.frames 并在lapply(). 然后将它们绑定rbindlist()- 用 NA 填充缺失的单元格。
require(data.table)
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
)
Run Code Online (Sandbox Code Playgroud)