【发布时间】:2022-01-17 16:21:19
【问题描述】:
我想根据标识符计算几列之间的差异(有关可重现的示例和目标数据框,请参见下面的脚本)。
This question 有点相似,但仅适用于成对的标识符。我想不出如何适应它。 我也可以有多个数据框,每个标识符一个,但我也不知道在这种情况下如何计算多列差异。
下面的代码允许创建一个示例数据集,并且具有我当前使用的代码。它给了我想要的东西,我只想知道是否有办法不说明我想要计算的所有差异(在我的数据集中,我的参数和深度比样本数据中的更多)。
提前感谢您的帮助!
library(tidyverse)
# sample data
create.dt <- function(t = 0) {
data.frame(parameter = rep(c("temperature","oxygen"), each = 3),
date = rep(c(Sys.Date()+t), each = 6),
depth = rep(1:3, times = 2),
value = c(data.frame(x = rnorm(3, 16, 2)) %>%
arrange(-x) %>% pull,
data.frame(x = rnorm(3, 7, 1)) %>%
arrange(-x) %>% pull
))
}
# Multi-site dataset
dt <- rbind(
cbind(site = "A", create.dt(t = c(-3:0))),
cbind(site = "B", create.dt(t = c(-3:0))),
cbind(site = "C", create.dt(t = c(-3:0))),
cbind(site = "D", create.dt(t = c(-3:0))),
cbind(site = "E", create.dt(t = c(-3:0))))
# Reshape the data and compute differences
dt %>% pivot_wider(id_cols = c(site,date), names_from = c(parameter,depth), values_from = value, names_sep = "_") %>%
# do the difference, depth to depth, parameter by parameter
# What I would like is not have to write manually each differences pair
mutate(temperature_1_2 = temperature_1 - temperature_2,
temperature_1_3 = temperature_1 - temperature_3,
temperature_2_3 = temperature_2 - temperature_3,
oxygen_1_2 = oxygen_1 - oxygen_2,
oxygen_1_3 = oxygen_1 - oxygen_3,
oxygen_2_3 = oxygen_2 - oxygen_3)
【问题讨论】: