首页 > 解决方案 > 汇总来自不同列和行的值

问题描述

是否有内置方法来计算不同行和列的总和?我知道我可以从 id、drug、day2、sum_d2 形成一个新的数据框,重命名最后两列,删除“旧”数据框中的这些列,使用“旧”数据框执行 rbind 并按组汇总。但这似乎异常复杂,而且可能容易出错。

如何使用 id + drugname 作为分组变量 + day1 + day2 计算 2020-01-02 给出的 drug_a 的 sum_1 和 sum_2 的总和(当这两个相同时)?

这种格式的原因是我必须在午夜分割连续输液的剂量......

示例数据:

id <- c(rep(1,2))
drug <- c(rep("Drug_a",2))                     
day1 <- c(rep("2020-01-01",1),rep("2020-01-02",1))
sum_1 <- c(rep(250,1),rep(550,1))
day2 <- c(rep("2020-01-02",1),rep("2020-01-03",1))
sum_2 <- c(rep(100,1),rep(75,1))

example_data <- data.frame(id,drug,day1,sum_1,day2,sum_2)

  id   drug       day1 sum_1       day2 sum_2
1  1 Drug_a 2020-01-01   250 2020-01-02   100
2  1 Drug_a 2020-01-02   550 2020-01-03    75

这些行中的预期输出:

  id   drug       day    sum
1  1 Drug_a 2020-01-01   250 
2  1 Drug_a 2020-01-02   650 
3  1 Drug_a 2020-01-03    75

标签: r

解决方案


也许这样的事情可能会奏效。您可以使用pivot_longerto 将dayandsum放入单个列中(即,将andday_1组合day_2day和into )。sum_1sum_2sum

library(tidyverse)

example_data %>%
  pivot_longer(cols = c(-id, -drug), names_to = c(".value", "group"), names_sep = "_") %>%
  group_by(id, drug, day) %>%
  summarise (total = sum(sum))

# A tibble: 3 x 4
# Groups:   id, drug [1]
     id drug   day        total
  <dbl> <fct>  <fct>      <dbl>
1     1 Drug_a 2020-01-01   250
2     1 Drug_a 2020-01-02   650
3     1 Drug_a 2020-01-03    75

数据

id <- c(rep(1,2))
drug <- c(rep("Drug_a",2))                     
day_1 <- c(rep("2020-01-01",1),rep("2020-01-02",1))
sum_1 <- c(rep(250,1),rep(550,1))
day_2 <- c(rep("2020-01-02",1),rep("2020-01-03",1))
sum_2 <- c(rep(100,1),rep(75,1))

example_data <- data.frame(id,drug,day_1,sum_1,day_2,sum_2)

推荐阅读