【问题标题】:intersection of vector and matrix by names [closed]向量和矩阵的交集[关闭]
【发布时间】:2016-05-10 19:06:04
【问题描述】:

我有一个叫sl的角色

[1]   a     b     c

还有一个称为returns.ts的矩阵。

     a     b     d
[1]  2     3     4
[4]  1     2     3
[7]  4     3     2

我想得到字符和矩阵的名称与矩阵中的数据的交集,如下所示:

      a     b
 [1]  2     3
 [3]  1     2
 [5]  4     3

我尝试过使用代码

r.sl <- returns.ts[intersect(names(returns.ts), names(sl))]

但是,创建的对象显示为空。

任何帮助将不胜感激。

【问题讨论】:

  • 改用colnames(returns.ts)
  • 感谢您的建议,不幸的是,该对象仍然显示为空。
  • 你的也可以,但在最后一个表达式的括号后还需要一个逗号
  • 返回一个包含所有列名但没有观察值和交集的矩阵。

标签: r matrix vector


【解决方案1】:

您需要做的就是将列表元素的名称传递给矩阵的j 以返回所需的列:

returns.ts[, names(sl)]

检查 sl 是一个列表,而不是一个向量 -- class(sl)

【讨论】:

  • 好吧,它适用于这个例子,例如如果 sl 中的名称是 cols 的子集。否则需要过滤sl
  • 谢谢你的回答,不幸的是我有一个字符而不是我最初想象的向量。我已经更新了这个问题。当我使用“returns.ts[,names(sl)]”时,我会得到一个返回的所有日期列表。
  • 这应该比:returns.ts[, sl]
  • 完美运行,非常感谢。
【解决方案2】:
test <- matrix(1:12,ncol = 3)
colnames(test) <- c('a','b','d')
sl <- setNames(c(10,20,40),c('a','b','c'))
test[,which(colnames(test) %in% names(sl))]

【讨论】:

  • 感谢您的帮助,当我在我的数据上运行此代码时,我再次从returns.ts 系列中获得了所有日期戳的时间序列列表。
猜你喜欢
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
相关资源
最近更新 更多