【问题标题】:Vectorizing index over a list of dataframes R对数据帧列表进行矢量化索引 R
【发布时间】:2019-06-18 15:05:48
【问题描述】:

我在 R 中有一个超过 100 个大规模矩阵的列表。

我将使用一个名为 list_matrices 的小示例列表对象

list(structure(c(1, 2, 3, 4, 2, 3, 3, 4), .Dim = c(4L, 2L), .Dimnames = list(
    NULL, c("x", "y"))), structure(c(1, 2, 3, 4, 2, 2, 3, 4), .Dim = c(4L, 
2L), .Dimnames = list(NULL, c("a", "b"))))

矩阵1应该是对象x,矩阵2应该是对象a

我正在尝试对列表中的每个矩阵进行索引,这样如果行中第 1 列的值和第 2 列的值匹配,则该行从矩阵中索引出来,该矩阵仍然存储为它自己的矩阵list_matrices 对象。基本上我想要这样的东西

mat_tf<- <-mat[(mat[,1]!=mat[,2],]

但在列表中的每个矩阵上

我还想在每个矩阵对象上添加一个新名称,并附上 _tf,这样当我调用 list_matrices[[1]] 时,我会得到一个名为 x_tf 的矩阵

显然 for 循环不是一个聪明的主意,所以我正在尝试寻找方法来矢量化该过程。有没有人有什么建议?

【问题讨论】:

  • 对于帖子的第二部分,您可以随意命名列表元素,但是当您使用 list_matrices[[1]] 提取列表元素时,您将只得到一个矩阵,它不会没有名字。
  • 好收获。那很有意思。我现在也注意到了,但是在我的真实矩阵列表中,我实际上可以使用单个矩阵的名称来索引它们。有什么不同的想法吗?
  • 没有什么不同,您可以使用名称来提取列表元素,我只是澄清一下,当您提取列表元素时,无论是使用名称还是位置,您都会得到一个名称不存在的矩阵不要跟着它走

标签: r list matrix vectorization


【解决方案1】:
lapply(list_matrices, function(mat) mat[mat[,1] != mat[,2],])

然后,您可以根据需要使用 names 函数命名您的列表。

【讨论】:

  • 好吧,所以我似乎确实让事情发生了!你能解释一下mat inside(函数)是如何工作的吗?所以,如果我有一个数据框列表,我想这样做,我会改变什么吗?
  • 另外,您知道一个快速简便的解决方案来检查哪个(使用我猜的哪个函数)来查看每个矩阵中的哪些行这适用于一个很好的检查是否功能有效吗?
  • 数据帧也是如此。 mat 只是函数参数的任意名称,您可以将其命名为 dfx 或任何您想要的名称。您可以运行 lapply 仅使用条件检查来获取指示行的逻辑列表
猜你喜欢
  • 2018-01-31
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-13
  • 1970-01-01
相关资源
最近更新 更多