我有一个数据框 (df
),其中包含两个不同站点(A
和 B
)和不同深度(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.5m
、C.I.12m
、C.I.20m
、C.I.28m
和 C.I.35m
)。然后,另一个名为 MCIC10m
的变量总结了 C.I.5m
和 C.I.12m
之间的区别。然后是另一个名为 MCIC20m
的,它总结了 C.I.12m
、C.I.20m
和 C.I.28m
之间的区别。最后,一个名为 MCIC30m
的变量总结了 C.I.28m
和 C.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/