【问题标题】:Split a vector list with M elements into 2 lists of N and M-N elements将包含 M 个元素的向量列表拆分为 2 个包含 N 和 M-N 个元素的列表
【发布时间】:2019-09-27 00:05:30
【问题描述】:

我创建了一个包含 50 个元素的向量列表 aa。我需要将 aa 拆分为两个向量列表,称为 bb 和 cc。 bb 具有 aa 的前 20 个元素,而 cc 具有 aa 的后 30 个元素。我该怎么做?

原始向量列表的创建

aa <- list (sample (1:50))
aa
#[[1]]
# [1] 29 30 39 45 17 11 43 14 24 34  3  1 28  2 21 23  6 31  5 27 44  7  4 46 49 22 33 38 50 36 15 48  8 16 25 42 13 41 47
#[40] 37 26 32 35  9 18 10 20 40 19 12

对不起,我知道我的问题很基本。可能是问题太简单了,网上也不容易找到解决办法。

【问题讨论】:

  • 尝试split split(vector_list, rep(1:2, c(m, n))) 其中m, n 是应该在拆分列表中的元素的长度
  • 不知道怎么用split。很抱歉=(好的,我现在就试试,非常感谢
  • 试过了,对我不起作用。我无法看到如何使用 split(vector_list, rep(1:2, c(m, n))) 从您的代码中派生 list1 和 list2。抱歉,我对 R 真的很陌生
  • 欢迎来到 StackOverflow!请阅读有关how to ask a good question 的信息以及如何提供reproducible example。这将使其他人更容易帮助您。
  • 那么bb &lt;- aa[[1]][1:20]cc &lt;- aa[[1]][21:50] ?

标签: r


【解决方案1】:

由于我无法直接回答此问题,因此添加了答案。我们可以先使用[[ 对列表进行子集化,然后使用[ 选择其中的单个元素。

bb <- aa[[1]][1:20]
cc <- aa[[1]][21:50]

我们还可以使用headtail 分别选择前20 个和后30 个元素。

bb <- head(aa[[1]], 20)
cc <- tail(aa[[1]], 30)

【讨论】:

    【解决方案2】:

    我们可以使用split 来创建listvectors

    lst1 <-  split(aa[[1]], rep(1:2, c(20, 30)))
    

    并使用[[提取向量

    lst[[1]]
    lst1[[2]]
    

    它可以扩展到任意数量的拆分(即通用版本),我们只需要更改rep

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 2018-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多