r - 在整行上按行使用 purrr 而不是 apply()

标签 r apply purrr

我要换 apply() (及其衍生物)带有 purrr功能。

我有一个像这样的 data.frame:

> df
  V1 V2 V3
1 NA  2  3
2  2 NA  3
3  3  3 NA

我想按行应用两个函数:min(x, na.rm = T)which.min(x)并将结果作为数据帧返回。

如果我知道有多少列我可以做例如这个:
pmap_dfr(df, function(V1, V2, V3) {data.frame(min = pmin(V1, V2, V3, na.rm = T),
                                              where = which.min(c(V1, V2, V3)))})

  min where
1   2     2
2   2     1
3   3     1

我该如何制作 pmap()或任何其他 purrr函数将整行作为参数,就像 apply()做?
func <- function(x) {data.frame(min = min(x, na.rm = T), where = which.min(x))}

> Reduce(rbind, apply(df,1, func))
    min where
V2    2     2
V1    2     1
V11   3     1



我可能只是错过了一个功能或一些技巧。谢谢你的帮助。

最佳答案

如果您使用省略号,您的解决方案将适用于所有列。

pmap_dfr(df, ~data.frame(min = min(..., na.rm = TRUE), where = which.min(c(...)))) 

  min where
1   2     2
2   2     1
3   3     1

关于r - 在整行上按行使用 purrr 而不是 apply(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56074035/

相关文章:

r - 为多组列动态创建行的替代(更快)方法

r - 如何计算R中的邻接矩阵

string - 如何将多个字符列组合成 R 数据框中的单个列

r - 使用R,遍历数据帧,并为在循环中创建的对象分配适当的名称

python - 无论长度如何,Pandas Dataframe 上最干净的迭代/功能应用程序

用 0 按组替换前导 NA,但保留其他 NA

r - 限制变量范围

r - 如何对 R 中矩阵的每一行重复计算?

r - 将数据框转换为数据框的命名列表,其名称来自 R 中的列

R - `purrr::map()` 中的复合函数与管道函数