r - 将 dplyr 函数映射到 R 数据帧中的每个变量对组合
问题描述
我想将一个函数映射到 R 中数据框中的每个变量组合对,并返回一个数据框,其中包含每对的函数输出。我可以像这样手动执行此操作:
library(tidyverse)
df <- tibble(a = c(1, 2), b = c(4, 3), c = c(5, 7))
f <- function(a, b) a - b # a simple function for sake of example
df %>% transmute(a_minus_b = f(a, b),
a_minus_c = f(a, c),
b_minus_c = f(b, c),
b_minus_a = f(b, a),
c_minus_a = f(c, a),
c_minus_b = f(c, b))
对于具有许多变量的数据框,手动执行此操作显然是不切实际的。如何使用迭代将我的函数应用于每个组合变量对?
解决方案
另一种使用dplyr
and的方法purrr
可能如下所示:
library(tidyverse)
df <- tibble(a = c(1, 2), b = c(4, 3), c = c(5, 7))
f <- function(a, b) a - b # a simple function for sake of example
f_help <- function(x) {
df %>%
transmute_at(setdiff(names(.), x), ~ f(!!sym(x), .x)) %>%
rename_all(.funs = ~ paste0(x, "_minus_", .x))
}
map(names(df), f_help) %>%
bind_cols()
#> # A tibble: 2 x 6
#> a_minus_b a_minus_c b_minus_a b_minus_c c_minus_a c_minus_b
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 -3 -4 3 -1 4 1
#> 2 -1 -5 1 -4 5 4
推荐阅读
- node.js - 无法从 mongodb-atlas 获取数据?
- javascript - 使用 lodash react js 过滤带有数组值的嵌套数据
- javascript - Primefaces inputMask 只接受十六进制
- ruby-on-rails - 将变量从设计控制器传递到自定义邮件程序?
- websocket - 通过 Websockets 对 MQTT 代理的前端订阅
- python - 如何在列表视图中选择行
- perl - 如何在perl中存储模块avail命令的输出?
- reactjs - 如何从某些屏幕中删除页眉和页脚
- google-ads-api - 如何使用 Google php 客户端库启用 gRPC 日志?
- typo3 - 如何使用路由器增强器翻译 URL