我有这个数据框,我想计算 VAL1-VAL3 中的一个值,如果在 T1-T5 中则对其求和
VAL1 <- c(1,3,2,4,9)
VAL2 <- c(5,6,3,1,2)
VAL3 <- c(7,5,5,9,5)
T1 <- c(4,2,6,4,8)
T2 <- c(10,1,2,9,9)
T3 <- c(6,8,6,3,2)
T4 <- c(5,4,2,4,1)
T5 <- c(9,7,8,4,5)
df<- data.frame(VAL1,VAL2,VAL3,T1,T2,T3,T4,T5)`
Run Code Online (Sandbox Code Playgroud)
| 值1 | 值2 | 值3 | T1 | T2 | T3 | T4 | T5 |
|---|---|---|---|---|---|---|---|
| 1 | 5 | 7 | 4 | 10 | 6 | 5 | 9 |
| 3 | 6 | 5 | 2 | 1 | 8 | 4 | 7 |
| 2 | 3 | 5 | 6 | 2 | 6 | 2 | 8 |
| 4 | 1 | 9 | 4 | 9 | 3 | 4 | 4 |
| 9 | 2 | 5 | 8 | 9 | 2 | 1 | 5 |
所需的输出,新列RESULT1-RESULT3(相同的df):
| 值1 | 值2 | 值3 | T1 | T2 | T3 | T4 | T5 | 结果1 | 结果2 | 结果3 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 5 | 7 | 4 | 10 | 6 | 5 | 9 | 0 | 1 | 0 |
| 3 | 6 | 5 | 2 | 1 | 8 | 4 | 7 | 0 | 0 | 0 |
| 2 | 3 | 5 | 6 | 2 | 6 | 2 | 8 | 2 | 0 | 0 |
| 4 | 1 | 9 | 4 | 9 | 3 | 4 | 4 | 3 | 0 | 1 |
| 9 | 2 | 5 | 8 | 9 | 2 | 1 | 5 | 1 | 1 | 1 |
我怎样才能做到这一点?
你可以试试:
library(dplyr)
df |>
mutate(across(VAL1:VAL3, ~ rowSums(pick(T1:T5) == .x), .names = "RESULT_{seq_along(col)}"))
VAL1 VAL2 VAL3 T1 T2 T3 T4 T5 RESULT_1 RESULT_2 RESULT_3
1 1 5 7 4 10 6 5 9 0 1 0
2 3 6 5 2 1 8 4 7 0 0 0
3 2 3 5 6 2 6 2 8 2 0 0
4 4 1 9 4 9 3 4 4 3 0 1
5 9 2 5 8 9 2 1 5 1 1 1
Run Code Online (Sandbox Code Playgroud)