【问题标题】:R: Select multiple values from vector of sequencesR:从序列向量中选择多个值
【发布时间】:2015-05-07 11:38:41
【问题描述】:

在 R 中,我试图弄清楚如何从预定义的序列向量中选择多个值(例如 indices = c(1:3, 4:6, 10:12, ...))。换句话说,如果我想要一个在“索引”中包含第 3、第 5 和第 7 个条目的新向量,我应该使用什么语法来获取只有这些序列完整的向量,例如c(10:12, ...)?

【问题讨论】:

  • indices[c(3, 5, 7)]
  • 你可能被否决了,因为这是一个非常基本的 R 子集问题。几乎所有对 R 文本/博客/教程的介绍都会涵盖这一点……
  • 我已经尝试过 indices[c(3,5,7)] 并且没有返回序列向量。相反,我要返回 c(3,5,7)。
  • 换句话说,我想要将第 3、第 5 和第 7 个序列作为向量返回的语法,例如c(10:12, ...)。
  • 您提出了一个问题,并接受了一个答案。不要进一步编辑问题。提出一个新问题作为后续问题(您可以链接到该问题作为参考)。

标签: r vector sequence indices


【解决方案1】:

您正在寻找的是如何对数据进行子集化。最常见的是使用方括号表示法:

样本数据:

my_vector <- c(100:120)
my_vector
# 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120

要取出的值:

indices <- c(1:3, 4:6, 10:12)
indices

# 1  2  3  4  5  6 10 11 12

使用括号表示法进行子集化

my_vector[indices]
# 100 101 102 103 104 105 109 110 111

还有一个叫做subset的函数也可以做到这一点。

【讨论】:

  • 你误解了我想要的。基本上我需要什么,请参阅 Alex 的帖子。我已经更新了原始问题,以使我想要更清楚。但是您引用的标准 R 并没有回答我想知道的内容。
  • 啊……我很抱歉。很高兴知道您得到了想要的答案
【解决方案2】:

如果我理解正确,您需要 c(1:3, 4:6, 10:12, ...) 中的第 3、5 和第 7 个条目,这意味着您要从向量中提取特定的索引

当您执行c(1:3, 4:6, ...) 之类的操作时,生成的向量并不是您想要的。相反,请使用list(1:3, 4:6, ...)。然后你可以这样做:

indices <- list(1:3, 4:6, 10:12, 14:16, 18:20)

x <- rnorm(100)

x[c(indices[[3]], indices[[5]])]

这相当于:

x[c(10:12, 18:20)]

这又相当于:

x[c(10, 11, 12, 18, 19, 20)]

如果我误解了您的问题,请告诉我。

【讨论】:

  • 如果我把它变成一个循环,你的第一个答案应该可以工作,因为我想要的序列随着我提取的每个样本而变化。
  • @ksed:太好了。很高兴你找到了让它发挥作用的方法。
猜你喜欢
  • 2014-05-20
  • 1970-01-01
  • 2022-11-20
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
  • 1970-01-01
相关资源
最近更新 更多