r - 汇总来自不同列和行的值
问题描述
是否有内置方法来计算不同行和列的总和?我知道我可以从 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
解决方案
也许这样的事情可能会奏效。您可以使用pivot_longer
to 将day
andsum
放入单个列中(即,将andday_1
组合day_2
成day
和into )。sum_1
sum_2
sum
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)