我必須根據幾個變數創建一個加權總分 (WSum)。例如,mydata具有三個變數(A、B 和 C)。我必須創建一個“WSum”分數,其中我將每個變數乘以weights資料集中存在的權重,并將所有這些變數相加(A*0.5 B*1.2 C*2)。我必須在不更改資料集中其他變數的情況下完成所有這些操作,例如,在本例中是變數 ID。
PS:我絕對可以手動完成mutate(Wsum = (A*0.5 B*1.2 C*2))。但我想自動化這個程序,因為正如你可能猜到的,我沒有只有 3 個變數,而且這不是一次性的作業。提前致謝。
示例資料
需要的包
library(dplyr)
示例資料
mydata <- tibble(ID = (01, 02
A = c(1, 2, 3),
B = c(2, 5, 4),
C = c(3, 6, 1))
> # A tibble: 3 x 4
> ID A B C
> <dbl> <dbl> <dbl> <dbl>
>1 1 1 2 3
>2 2 2 5 6
>3 3 3 4 1
資料權重字典
weights <- tibble( variables = c("A", "B", "C"),
w = c(0.5, 1.2, 2))
># A tibble: 3 x 2
> variables w
> <chr> <dbl>
>1 A 0.5
>2 B 1.2
>3 C 2
預期結果
># A tibble: 3 x 5
> ID A B C Wsum
> <dbl> <dbl> <dbl> <dbl> <dbl>
>1 1 1 2 3 8.9
>2 2 2 5 6 19
>3 3 3 4 1 8.3
uj5u.com熱心網友回復:
在base R,使用%*%或crossprod轉換為之后matrix
mydata$Wsum <- as.vector(as.matrix(mydata[weights$variables]) %*%
with(weights, setNames(w, variables)))
-輸出
mydata$Wsum
[1] 8.9 19.0 8.3
或者使用tidyverse,回圈across'mydata'中的列,從deframed(轉換為命名向量)'weights'中獲取相應的值,乘以得到rowSums'Wsum'列
library(dplyr)
library(tibble)
mydata <- mydata %>%
mutate(Wsum = rowSums(across(all_of(weights$variables),
~ .x * deframe(weights)[[cur_column()]])))
mydata
# A tibble: 3 × 4
A B C Wsum
<dbl> <dbl> <dbl> <dbl>
1 1 2 3 8.9
2 2 5 6 19
3 3 4 1 8.3
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/422022.html
標籤:
上一篇:如何使用輸入標簽更新資料庫中的值
