r - 使用 r 中 dplyr 中的 mutate_all() 将 df 中的每一列除以其他列
问题描述
我正在尝试将数据框中的每一列除以其他列。从具有 A、B、C 列的数据框开始。我想以包含 B/A、C/A、A/B、C/B、A/C 和 B/C 列的数据框结束。我找到了一种方法来做到这一点,这需要我为每个分母编写一个函数,但如果我可以通过定义一个函数来做到这一点,我会更喜欢它。
我在这里找到了一个类似但不相同的问题。在R中将每一列除以它之前的列
如果可能的话,我想使用 dplyr 来解决这个问题。
这是我得到的最接近的。
## create example data frame
df <- data.frame(A=rnorm(10),
B=rnorm(10),
C=rnorm(10),)
## calculate ratios
ratio_df <- df%>%
mutate_all(.funs = funs(A=./A,
B=./B,
C=./C))
这将返回包含 A/A、B/A、C/A、A/B、B/B、C/B、A/C、B/C、C/C 列的所需结果。我可以很容易地过滤掉 A/A、B/B 和 C/C 给出所需的结果,但是当有大量列时它很笨重。
有没有办法在不编写每个单独的函数的情况下实现这一点?
解决方案
另一个使用purrr
which 的答案也将具有您指定的列命名:
library(tidyverse)
df %>%
select_if(is.numeric) %>%
map(~./df %>% select_if(is.numeric)) %>%
imap(~set_names(.x, paste0(names(.x), "_", .y))) %>%
bind_cols()
推荐阅读
- youtube-data-api - 如何根据项目编号找出连接到 Youtube 数据 API 服务的项目是什么?
- python - 将多行数据框单元格转换为多行 - Python
- java - 我可以在 Java 的同一个类中编写 FileWriter 和 bufferedwriter 吗?
- c++ - 不断重复一个功能,直到用户说停止?
- webrtc - Peerjs不断失去连接并且用户ID丢失
- c - 为什么在我的条件语句中指向指针算术的指针失败?
- ruby - 为每个子类创建父类变量的新实例
- python-3.x - python3中的标准输出为空
- php - 如何使 php 函数在 echo 中工作?
- python - Ansible for 循环与多个序列