我正在做一个调查研究项目,我们需要将一组列与另一组列相乘.我可以在base R中轻松做到这一点,但我不知道如何在整洁的、基于管道的工作流中做到这一点.我找到了许多将一组列与一列相乘的解决方案,但不适用于多列.非常感谢您的帮助.

下面的示例演示了如何在base R中解决问题.

library(tidyverse)

df <- tibble(
  a1 = c(1, 2, 3, 4, 5),
  a2 = c(5, 4, 3, 2, 1),
  a3 = c(1, 5, 2, 4, 3),
  b1 = c(1, 1, 2, 1, 1),
  b2 = c(3, 3, 5, 4, 1),
  b3 = c(2, 1, 4, 2, 1)
)

new_df <- df[, c("a1", "a2", "a3")] * df[, c("b1", "b2", "b3")]
names(new_df) <- c("c1", "c2", "c3")

reprex package(v2.0.1)于2022年6月14日创建

推荐答案

不是所有的东西都需要整洁.您拥有的base R解决方案工作得非常好,整洁且可扩展.

tidyverse也可以达到同样的效果,但这并不完美.这是across的一种方法.

library(dplyr)

df %>%
  mutate(across(starts_with('a'), .names = '{sub("a", "c", col)}') * 
         across(starts_with('b'))) %>%
  select(starts_with('c'))

#     c1    c2    c3
#  <dbl> <dbl> <dbl>
#1     1    15     2
#2     2    12     5
#3     6    15     8
#4     4     8     8
#5     5     1     3

基本R代码也可以写成-

df %>% select(starts_with('a')) * df %>% select(starts_with('b')) 

R相关问答推荐

想要创建一个可以存储四个多元正态总体的多元偏度的载体

生成具有受控相关性的x和y

R图中的字体大小和字体样式(带有R底图)

从API中抓取R数据SON

从开始时间和结束时间导出时间

ggplot的轴标签保存在officer中时被剪切

筛选出以特定顺序患病的个体

使用geom_segment()对y轴排序

如何使用ggplot对堆叠条形图进行嵌套排序?

使用Facet_WRAP时更改框图中线的 colored颜色

仅 Select 超过9行的CSV文件

根据1个变量绘制 colored颜色 发散的 map ,由另一个变量绘制饱和度,ggplot2不工作

R-按最接近午夜的时间进行筛选

当我添加美学时,geom_point未对齐

仅在R中的数据集开始和结束时删除所有 Select 列的具有NA的行

将项粘贴到向量中,并将它们分组为x的倍数,用空格分隔

我将工作代码重构为一个函数--现在我想不出如何传递轴列参数

将列表中的字符串粘贴到R中for循环内的dplyr筛选器中

多元正态分布的计算

如何获取R chromote中的当前URL?