如何根据其他变量中的条件添加列的内容

问题描述 投票:0回答:2

在 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

我不知道该怎么做,非常感谢

if-statement rstudio addition
2个回答
0
投票

轻松使用

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

0
投票

非常感谢您的回答。

它确实给了我小标题中的 TOTAL_VOLUME,但不会将其写回到数据帧中。你能告诉我该怎么做吗?

另外,如果想在这种情况下添加DATE,除了ID之外,我可以在代码中添加它吗?

df%>% 变异(TOTAL_VOLUME = sum(AMOUNT),.by = ID,日期)

© www.soinside.com 2019 - 2024. All rights reserved.