【问题标题】:splitting vector every two indices每两个索引拆分向量
【发布时间】:2017-07-05 08:15:08
【问题描述】:

给定 N 个元素的向量:

LETTERS[1:10]
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J"

如何获得data.table/frame (df) 如下?

 >df
 one two
 A   B
 C   D
 E   F
 G   H
 I   J

编辑

概括我想知道给定一个要拆分的向量如下:

   [A B C],[D E],[F G H I J] 

并获得:

     V1 V2 V3 V4 V5
      A  B  C NA NA
      D  E NA NA NA 
      F  G  H  I  J  

【问题讨论】:

  • dput这个[A B C],[D E],[F G H I J]
  • 我的意思是在预定义的位置拆分 LETTERS[1:10]
  • 好的,我明白了。但是您的预定义职位是如何构成的?它是带有索引的列表吗?一个向量?数据框?
  • 它是一个预定义的向量(由寻找特定模式的grep 给出)
  • 也许this link 会有所帮助。里面有一些不错的功能。

标签: r vector data.table


【解决方案1】:

一种选择是matrix 方式

as.data.frame(matrix(LETTERS[1:10], ncol=2,byrow=TRUE,
      dimnames = list(NULL, c('one', 'two'))), stringsAsFactors=FALSE)
#  one two
#1   A   B
#2   C   D
#3   E   F
#4   G   H
#5   I   J

如果我们需要创建索引,我们可以使用glsplit vectorrbind

do.call(rbind, split(v1, as.integer(gl(length(v1), 2, length(v1)))))

在哪里

v1 <- LETTERS[1:10]

更新

基于 OP 帖子中的更新

lst <- split(v1, rep(1:3, c(3, 2, 5)))
do.call(rbind, lapply(lst, `length<-`, max(lengths(lst))))
#   [,1] [,2] [,3] [,4] [,5]
#1 "A"  "B"  "C"  NA   NA  
#2 "D"  "E"  NA   NA   NA  
#3 "F"  "G"  "H"  "I"  "J" 

否则

library(stringi)
stri_list2matrix(lst, byrow = TRUE)

更新2

如果我们使用“splitVec”

lst <- split(v1, cumsum(seq_along(v1) %in% splitVec))

然后像上面那样继续

【讨论】:

  • 太棒了!如果我需要基于一个向量(索引...)进行拆分会发生什么。
  • @amonk 更新了答案
猜你喜欢
  • 2013-07-01
  • 1970-01-01
  • 2022-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-20
  • 2018-08-11
  • 1970-01-01
相关资源
最近更新 更多