r - 将数据框中的列乘以另一个数据框中给出的值

标签 r dplyr

我一直在尝试在 dplyr 中完成此任务,但无法弄清楚。

在一个数据框(df1)中,我有包含值的列。

|A  |B  |
|23 |43 |
|24 |11 |

在另一个数据框(df2)中我有值。

|Column|Value|
|A     |0.12 |
|B     |1.23 |

我想以某种方式将 df1 的“A”列中的每个单元格乘以 df2 中该列的给定值。看起来应该很简单,但我还没有完全弄清楚正确的语法。我怀疑我正在使用 mutate,但任何建议将不胜感激。

主要尝试在 dplyr 中完成此任务,但欢迎提出其他建议。

最佳答案

您可以使用mutate(across()),并利用cur_column()对第二个数据帧进行子集化

mutate(d1, across(A:B, ~.x*d2[d2$Column==cur_column(),2]))

输出

      A     B
  <dbl> <dbl>
1  2.76  52.9
2  2.88  13.5

输入:

d1 = data.frame(A = c(23,24), B=c(43,11))
d2 = data.frame(Column = c("A","B"), Value = c(.12,1.23))

这可以扩展到任意数量的列;这是一个包含三列的输入,A、B、C。

d1 = data.frame(A = c(23,24), B=c(43,11), C=c(25,16))
d2 = data.frame(Column = c("A","B", "C"), Value = c(.12,1.23, 0.75))

mutate(d1, across(where(is.numeric), ~.x*d2[d2$Column==cur_column(),2]))


     A     B     C
1 2.76 52.89 18.75
2 2.88 13.53 12.00

有一种更详细的方法,其中 d1 旋转更长并连接到 d2,计算完成,结果旋转_更宽。它提供相同的输出:

inner_join(d2, pivot_longer(d1,everything(), names_to = "Column", values_to = "value")) %>% 
  mutate(value = Value*value) %>%
  select(-Value) %>% 
  pivot_wider(names_from=Column, values_from = value, values_fn=list) %>% 
  unnest(everything())

输出:

      A     B     C
  <dbl> <dbl> <dbl>
1  2.76  52.9  18.8
2  2.88  13.5  12  

关于r - 将数据框中的列乘以另一个数据框中给出的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71637248/

相关文章:

r - 如何使用 ggplot 按降序对水平条形图进行排序?

r - 将 Boot 调用包装在函数中会产生错误

r - 将每三行数据框相加,然后将新结果相乘 - R

如果一行满足条件,则删除具有共同值的行

r - 使用 dplyr 和 data.table 包中的 length 函数聚合

r - 从多个数据框中子集公共(public)行

php - 'Rscript' 不是内部或外部命令,也不是可运行的程序或批处理文件

R 在数据框列中列出因素

R dplyr在分组后在两行之间划分

r - 如何在 dplyr mutate 中使用由列遮蔽的变量