我尝试在R和excel上编写代码,可以获得任何形式的帮助。在excel中,我可以使用下面的代码来查找最大值并报告相邻值中的时间。
=(INDEX($D$1:$D$97,MATCH(MAX($E$1:$E$97),$E$1:$E$97,0)))但是,如果不手动更改每一行的公式,我就无法弄清楚如何有效地对整个数据集进行编码。
在R中,我不知道如何返回相邻的单元格值(例如,查找最大溶解氧并返回相应的时间值)。这是我在R中的东西。
library(data.table)
df<- read.csv("Book3.csv")
df
setDT(df)
n <- 97
hi <- df[datetimes, max(DO), by= (seq(nrow(df)) - 1) %/% n]如有任何帮助,我们将不胜感激!
发布于 2019-08-15 06:13:02
在R中的Lauren dplyr包在这里会非常有用。你想要做的是:
library(dplyr)
df <- read.csv(filepath) %>%
filter(DO=max(.$DO) %>%
select(datetimes)管道被称为%>%,它们基本上将一个函数的结果传递给下一个函数。.$DO告诉它使用当前数据框对象并选择DO列。然后,select语句告诉它只显示datetimes列。
发布于 2019-08-15 06:59:09
如果您使用的是data.table包,请利用它提供的IDateTime类和按日期设置的简单子集。惟一的诀窍是使用.SD来显示所有行。由于您没有提供数据示例,因此我将生成一个示例:
library(data.table)
set.seed(222)
datetimes <- seq(as.POSIXct("2019-01-01"), as.POSIXct("2019-01-03"), by = "3 hour")
exDT <- data.table(
date = as.IDate(datetimes),
time = as.ITime(datetimes),
DO = rnorm(length(datetimes), 20, 5))
> exDT[, .SD[DO == max(DO)], by = date]
date time DO
1: 2019-01-01 21:00:00 27.807025
2: 2019-01-02 06:00:00 25.262292
3: 2019-01-03 00:00:00 9.972435另外,选中?fread可以将CSV文件作为data.table直接读取。
https://stackoverflow.com/questions/57502231
复制相似问题