R語言-資料框分組求平均值
阿新 • • 發佈:2018-11-07
【技術關鍵】
1、從excel把資料讀到資料框
2、演算法實現將資料框的一些資料合為新的資料並組成新的資料框
3、將處理結果,即新的資料框儲存到excel檔案(或.csv)
4、將繪圖結果輸出到PDF檔案儲存
最近在嘗試分析近日的環境溫溼度變化;
雖然裝置只運行了48小時左右;
但收集到的有效資料有30000+(當然對於R而言這算很小意思的了);
由於環境溫溼度在一小段時間內基本保持穩定;
所以在分析幾日內的溫溼度變化情況時可以以每10min為單位記錄資料;
這就需要一個指令碼,能將資料有效劃分為單位後求均值再儲存到表;
################################################### # - Filename : washData.R # - Author : Johan Version : 1.0 Date : 2018/5/3 # - Discription : 將excel表中的資料分10min計算平均值 # 並儲存到excel # - Function list : # 1. # - Others : # 1.本程式可分析.xls或.csv檔案 ################################################### # 引用包 library(RODBC) # 設定工作目錄 setwd("H:/mySoftware/R/myData") # 匯入資料到myDataFrame,檔名根據需要改變 # 開啟th_record2.xls,並讀取表Sheet1 channel <- odbcConnectExcel2007("th_record2.xls") myDataFrame <- sqlFetch(channel, "Sheet1") odbcClose(channel) # 為myDataFrame增加列名 dataColName <- c("temp","humi","time","year","month","day","hour","minute","second") names(myDataFrame) <- dataColName # 初始化快取向量 # 時分秒為起始量,可修改 NUM <- c() # 編號 TEMP <- c() # 溫度 HUMI <- c() # 溼度 t <- 0 # 溫度快取 h <- 0 # 溼度快取 num <- 0 # 編號快取 dn <- 0 # 計數器 flag <- FALSE # 儲存指示 # 迴圈處理資料 for(i in 1 : 31600){ # 當前分鐘是否為10的倍數 if(myDataFrame$minute[i] %% 10 == 0){ # 計算上一組資料的均值並儲存 if(flag){ t <- t / dn h <- h / dn TEMP <- c(TEMP, t) HUMI <- c(HUMI, h) num <- num + 1 NUM <- c(NUM, num) flag <- FALSE } # 快取復位 dn <- 0 t <- 0 h <- 0 # 新增記錄 t <- t + myDataFrame$temp[i] h <- h + myDataFrame$humi[i] dn <- dn + 1 } else{ # 新增記錄 t <- t + myDataFrame$temp[i] h <- h + myDataFrame$humi[i] dn <- dn + 1 flag <- TRUE } } # 構建新資料框 newFrame <- data.frame(NUM, TEMP, HUMI) newName <- c("number","temp","humi") names(newFrame) <- newName # 寫入.csv檔案 write.csv(newFrame, "new_th_record.csv") # 繪圖 plot(newFrame$number, newFrame$temp, pch=20, lty=3, col="red") lines(newFrame$number, newFrame$humi, pch=20, lty=3, col="blue")
把處理結果儲存到新的.csv或者.xls檔案即是整個指令碼的目的所在,方便後面的資料分析。
執行後得到的效果如下:(由於溫溼度的數值不在一個層次所以反映得不太直觀,可嘗試調換plot和lines的順序,通過繪圖方面的學習可以畫出更好看的圖)
如果想要輸出為PDF儲存該圖片,可以執行另一個指令碼:
PDF檔案的一個好處就是它裡面的圖片是向量的,也就是說放大圖片不會改變圖片的原樣,原本看上去粘在一塊兒的點放大以後能看出來是分開的。pdf("new_th_record.pdf") plot(newFrame$number, newFrame$humi, pch=20, lty=3, col="blue") lines(newFrame$number, newFrame$temp, pch=20, lty=3, col="red") dev.off()