【问题标题】:R combine indexed variables into a vectorR将索引变量组合成一个向量
【发布时间】:2018-08-13 18:44:38
【问题描述】:

我有以下变量 x11 x12 x13 x21 x22 x23....x51,x52,x53

我想要一个包含以上所有值的向量

x

除了单独输入所有名称之外,有没有一种简单的方法可以将它们组合成一个向量?

这只是一个例子,变量名是有索引的但比较复杂,这样的变量也不止5组。

我认为所有的答案都可以缓解这个问题。也许我应该更清楚。

本质上,变量名Xij有2个索引,

举个例子,i的取值范围是1-3,j的取值范围是1到5。所以变量是:

X11 X12 X13;
X21 X22 X23;
....;
X51 X52 X53;

所有答案都可以轻松应用于 i=1...5 的每组 Xijs 以创建 5 个向量:

Y1 包括 X11-X13 的值 .. Y5 包括 X51-X53。

那么Ys可以组合成Z。

【问题讨论】:

  • x <- paste0('x', 11:53)?当您说“组合它们”时,您的意思是组合向量中的名称或值吗?如果是后一种情况,您可能需要一个列表而不是向量。
  • 答案可能取决于细节。您应该尝试制作一个可重现的示例(例如,较小的只有 x11-x13)。我的猜测:unlist(mget(paste0('x', 11:53)))
  • unlist(mget(ls(pattern ="^x\d{2}$")))
  • t(sapply(paste0("x",1:5),paste0,1:3))???这些是变量吗?然后做mget(t(sapply(paste0("x",1:5),paste0,1:3)))

标签: r vector


【解决方案1】:

我不建议任何人这样做,但你可以

arr <- c()
for (i in c(11:53)) {
  arr <- c(arr, get(sprintf("x%d", i)))
}

根据需要更改范围。

【讨论】:

    【解决方案2】:
    # get all varnames in global environment with name that matches pattern
    vars <- ls()[grepl("x", ls())] 
    
    # combine those objects
    unlist(lapply(vars, get))
    

    【讨论】:

    • 不熟悉这种方法,会试一试!
    猜你喜欢
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2013-09-04
    相关资源
    最近更新 更多