【问题标题】:Create a matrix from all variables in each row从每行中的所有变量创建一个矩阵
【发布时间】:2018-01-12 12:47:28
【问题描述】:

我有一个存储一组矢量化矩阵的数据框。也就是说,在每一行中,我都有与矩阵中的元素相对应的 NxM 变量。

鉴于这个数据框,我想对存储在每一行中的矩阵应用一个函数,然后将结果存储在一个新变量中。

一种简单的方法是指定 NxM 变量的名称。例如,如果我要应用的函数只是元素的总和(在实际情况下,它会计算该矩阵的可能性):

library(dplyr)
cars %>% rowwise() %>% mutate(matrix=sum(matrix(c(speed,dist), nrow=1, ncol=2)))

但是由于我的矩阵的维度可能会从一个实验到另一个实验发生变化,并且由于这个维度通常太大而无法枚举所有变量,所以我想要一个通用的解决方案。

我试试

library(dplyr)
cars %>% rowwise() %>% mutate(matrix=sum(matrix(everything(), nrow=1, ncol=2)))

(在此示例中,应调整 ncol 和 nrow 以适应当前变量数,但我可以手动完成。)

但这会引发错误:

mutate_impl(.data, dots) 中的错误:评估错误:没有 tidyselect 变量已注册。

有简单的方法吗?

【问题讨论】:

  • 你不需要everything() 而不是any_vars()?
  • 是的,已修复,谢谢!
  • 这还会引发同样的错误吗?
  • 是的,确实如此。我在原始代码中使用了一切()。事实上,any_vars() 的错误信息有点不同。

标签: r dplyr tidyselect


【解决方案1】:

purrrlyr-package 可能有用

get_matrix_sum <- function(x) {x %>% as.matrix() %>% sum()}
cars %>% purrrlyr::by_row(..f = get_matrix_sum, .collate = "rows", .to = "matrix")

【讨论】:

    【解决方案2】:

    你可以使用旧的apply函数:

    library(dplyr)
    cars %>% mutate(matrix = apply(., MARGIN = 1, function(x)
      sum(matrix(x, nrow = 1, ncol = 2))))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 2016-12-04
      • 1970-01-01
      相关资源
      最近更新 更多