在 R 中,我想创建一个新变量 df$TOTAL_VOLUME 将每个 ID 的变量 AMOUNT 的内容添加在一起。
所以在这种情况下,我希望看到 A_001 的 df$TOTAL_VOLUME 加起来为 4,B_002 加起来为 1,C_003 加起来为 2.5。
身份证 | 日期 | 金额 |
---|---|---|
A_001 | 2018-11-26 | 0.5 |
A_001 | 2018-11-26 | 0.5 |
A_001 | 2020-08-01 | 1.5 |
A_001 | 2020-08-01 | 1.5 |
B_002 | 2022-05-23 | 0.5 |
B_002 | 2022-05-23 | 0.5 |
C_003 | 2015-03-11 | 1.5 |
C_003 | 2023-12-06 | 0.5 |
C_003 | 2023-12-06 | 0.5 |
我不知道该怎么做,非常感谢
轻松使用
tidyverse
:
library(dplyr)
df <- structure(list(ID = c("A_001", "A_001", "A_001", "A_001", "B_002",
"B_002", "C_003", "C_003", "C_003"),
DATE = structure(c(17861, 17861, 18475, 18475, 19135,
19135, 16505, 19697, 19697),
class = "Date"),
AMOUNT = c(0.5, 0.5, 1.5, 1.5, 0.5, 0.5, 1.5, 0.5, 0.5)),
row.names = c(NA, -9L), class = c("tbl_df", "tbl", "data.frame"))
df %>%
mutate(TOTAL_VOLUME = sum(AMOUNT), .by = ID)
# # A tibble: 9 × 4
# ID DATE AMOUNT TOTAL_VOLUME
# <chr> <date> <dbl> <dbl>
# 1 A_001 2018-11-26 0.5 4
# 2 A_001 2018-11-26 0.5 4
# 3 A_001 2020-08-01 1.5 4
# 4 A_001 2020-08-01 1.5 4
# 5 B_002 2022-05-23 0.5 1
# 6 B_002 2022-05-23 0.5 1
# 7 C_003 2015-03-11 1.5 2.5
# 8 C_003 2023-12-06 0.5 2.5
# 9 C_003 2023-12-06 0.5 2.5
或以 R 为基数:
df$TOTAL_VOLUME <- ave(df$AMOUNT, df$ID, FUN = sum)
df
# # A tibble: 9 × 4
# ID DATE AMOUNT TOTAL_VOLUME
# <chr> <date> <dbl> <dbl>
# 1 A_001 2018-11-26 0.5 4
# 2 A_001 2018-11-26 0.5 4
# 3 A_001 2020-08-01 1.5 4
# 4 A_001 2020-08-01 1.5 4
# 5 B_002 2022-05-23 0.5 1
# 6 B_002 2022-05-23 0.5 1
# 7 C_003 2015-03-11 1.5 2.5
# 8 C_003 2023-12-06 0.5 2.5
# 9 C_003 2023-12-06 0.5 2.5
非常感谢您的回答。
它确实给了我小标题中的 TOTAL_VOLUME,但不会将其写回到数据帧中。你能告诉我该怎么做吗?
另外,如果想在这种情况下添加DATE,除了ID之外,我可以在代码中添加它吗?
df%>% 变异(TOTAL_VOLUME = sum(AMOUNT),.by = ID,日期)