1

这是我第一次使用 R。我正在尝试进行一些基本数据汇总(查找最大值)以进行绘图。我可以在 Excel 中完成此操作,但这需要一段时间,而且由于我一遍又一遍地做同样的事情,因此开发 R 脚本很有意义。我搜索了以前的帖子,发现了类似的问题,但无法找出正确的 R 语法。同样,我是一个绝对的初学者,所以非常感谢任何帮助。

问题描述:我有一个包含两列的数据框:日期/时间(10 分钟时间戳)和压力。我需要确定每天 PRESSURE 的最大值。

     DateAndTime   Pressure
1  8/1/2011 0:06 0.06119370

2  8/1/2011 0:16 0.06003765

3  8/1/2011 0:26 0.06118049

我曾尝试从上一篇文章中修改下面的代码(尝试删除“which.max”部分)但没有成功。

for (imonth in 1:12) {

    month <- which(data[,2]==imonth) 
    monthly_max[imonth] <- max(data[month,3]) 
    maxi[imonth] <- which.max(data[month,3]) 
} 
tabela <- cbind(monthly_max, maxi) 
write.table(tabela, col.names=TRUE, row.names=TRUE, append=FALSE, sep="\t") 
4

3 回答 3

1
#creating some data for demonstration purpose
time1 <- seq(from=as.POSIXct("2011-01-08 00:06:00"),to=as.POSIXct("2011-01-18 00:06:00"),by="10 min")
DateAndTime <- format(time1,"%d/%m/%Y %H:%M")
Pressure <- rnorm(length(DateAndTime),0.06,0.01)
DF <- data.frame(DateAndTime,Pressure)

#look at first lines
head(DF)

#convert character in datetime format
DF$DateAndTime2 <- strptime(DF$DateAndTime,"%d/%m/%Y %H:%M",tz="GMT")
DF$Days <- trunc(DF$DateAndTime2,"days")

#create the summary
require(plyr)
summaryDF <- ddply(DF,.(Days),summarise,max(Pressure))
names(summaryDF)<-c("Day","Maximum")

#write to CSV file, which can be read into Excel
write.table(summaryDF,file="output.csv",col.names=TRUE,row.names=FALSE,dec=".",sep=",")
于 2012-07-16T18:00:35.987 回答
1

我建议使用时间序列类,例如 xts 或 zoo。

# create some data that looks like the OP's
NOW <- .POSIXct(1342460400)
d <- data.frame(DateAndTime=format(NOW+seq(0,3600*72,600), "%Y-%m-%d %H:%M"))
d$Pressure <- runif(NROW(d))/10

library(xts)  # load the xts package
# create an xts object from the OP's data.frame
x <- xts(d["Pressure"], as.POSIXct(d$DateAndTime))
# apply the max function to each day
dx <- apply.daily(x, max)
#                       Pressure
# 2012-07-16 23:50:00 0.09872622
# 2012-07-17 23:50:00 0.09947256
# 2012-07-18 23:50:00 0.09932375
# 2012-07-19 12:40:00 0.09971159
于 2012-07-16T17:46:12.247 回答
0

This?

dat <- data.frame(date = rep(seq(1,50,2),2), value = rnorm(50))
head(dat)   
require(plyr)
ddply(dat, .(date), summarise, max(value))
于 2012-07-16T17:40:39.110 回答