![](/img/trans.png)
[英]multiply dataframe columns with its parameters in another dataframe
[英]Multiply columns in dataframe by values given in another dataframe
我一直在嘗試在 dplyr 中完成此操作,但無法弄清楚。
在一個數據框 (df1) 中,我有包含值的列。
|A |B |
|23 |43 |
|24 |11 |
在另一個數據框 (df2) 中,我有 valus。
|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]))
Output
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,計算完成,結果 pivoted_wider。 它提供相同的 output:
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())
Output:
A B C
<dbl> <dbl> <dbl>
1 2.76 52.9 18.8
2 2.88 13.5 12
將 d1 列 A 中的值乘以 d2 中的值,其中列為 A:
library(dplyr)
d1 %>%
mutate(A = A * d2$Value[d2$Column=="A"])
A B
1 2.76 43
2 2.88 11
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.