gpt4 book ai didi

r - 如何计算不同变量的不同列数之间的最大差异

转载 作者:行者123 更新时间:2023-12-04 11:54:11 27 4
gpt4 key购买 nike

我有一个数据框 (df),其中包含两个不同站点(AB)和不同深度(5米C.I.5m、12米C.I.12m、20米C.I.20m、28米C.I.28m和35米C.I.35m) 随着时间的推移。我在这里展示一个例子:

df<- data.frame(Datetime=c("2018-08-06 00:00:00","2018-08-06 00:00:00","2018-08-06 03:00:00","2018-08-06 03:00:00","2018-08-06 06:00:00","2018-08-06 06:00:00"),
Site=c("A","B","A","B","A","B"),
C.I.5m=c(0.1,0.3,0.8,0.2,0.4,0.2),
C.I.12m=c(0.2,0.1,0.6,0.3,0.2,0.4),
C.I.20m=c(0.1,0.3,0.7,0.4,0.4,0.2),
C.I.28m=c(0.2,0.3,0.4,0.1,0.1,0.2),
C.I.35m=c(0.3,0.5,0.2,0.3,0.4,0.1))
df

Datetime Site C.I.5m C.I.12m C.I.20m C.I.28m C.I.35m
1 2018-08-06 00:00:00 A 0.1 0.2 0.1 0.2 0.3
2 2018-08-06 00:00:00 B 0.3 0.1 0.3 0.3 0.5
3 2018-08-06 03:00:00 A 0.8 0.6 0.7 0.4 0.2
4 2018-08-06 03:00:00 B 0.2 0.3 0.4 0.1 0.3
5 2018-08-06 06:00:00 A 0.4 0.2 0.4 0.1 0.4
6 2018-08-06 06:00:00 B 0.2 0.4 0.2 0.2 0.1

我想计算不同变量的深度之间(即我的数据框中的列之间)的当前强度有多大差异。我将第一个变量称为 MCICC(列中的最大电流强度变化),它是与当前强度相关的不同列的值之间的最大差异( C.I.5mC.I.12mC.I.20mC.I.28mC.I.35m)。然后,另一个名为 MCIC10m 的变量总结了 C.I.5mC.I.12m 之间的区别。然后是另一个名为 MCIC20m 的,它总结了 C.I.12mC.I.20mC.I.28m 之间的区别。最后,一个名为 MCIC30m 的变量总结了 C.I.28mC.I.35m 之间的区别。

我希望这样:

> df
Datetime Site C.I.5m C.I.12m C.I.20m C.I.28m C.I.35m MWCICC MWCIC10 MWCIC20 MWCIC30
1 2018-08-06 00:00:00 A 0.1 0.2 0.1 0.2 0.3 0.2 0.1 0.1 0.1
2 2018-08-06 00:00:00 B 0.3 0.1 0.3 0.3 0.5 0.4 0.2 0.2 0.2
3 2018-08-06 03:00:00 A 0.8 0.6 0.7 0.4 0.2 0.6 0.2 0.3 0.2
4 2018-08-06 03:00:00 B 0.2 0.3 0.4 0.1 0.3 0.3 0.1 0.3 0.2
5 2018-08-06 06:00:00 A 0.4 0.2 0.4 0.1 0.4 0.3 0.2 0.3 0.3
6 2018-08-06 06:00:00 B 0.2 0.4 0.2 0.2 0.1 0.3 0.2 0.2 0.1

棘手的一点是每个新变量都是根据不同数量的主列计算的。 MCICC 考虑了 5 深度(五列),MCIC10 考虑了 5 米和 12 米深度(两列),MCIC20 考虑了 12 、20 米和 28 米深度(两列),MCIC30 考虑了 28 米和 35 米深度(三列)。

有谁知道如何一次性全部计算出来?

最佳答案

我们可以使用combn来计算不同列之间的两两差异

f1 <- function(data) {
do.call(pmax, as.data.frame(abs(combn(data, 2,
FUN = function(x) x[, 1]- x[,2]))))
}
MWCICC <- f1(df[-c(1:2)])
MCIC10m <- f1(df[c("C.I.5m", "C.I.12m")])
MCIC20m <- f1(df[c("C.I.12m", "C.I.20m", "C.I.28m")]
MCIC30m <- f1(df[c("C.I.28m", "C.I.35m")]

df[c("MWCICC", "MCIC10m", "MCIC20m", "MCIC30m")] <- cbind(MWCICC,
MCIC10m, MCIC20m, MCIC30m)

关于r - 如何计算不同变量的不同列数之间的最大差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59118713/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com