R語言求一行(列表、list)數據的平均數操作

R語言求一個列表的平均數可以使用mean() :

mean英文意思有平均數的含義

x=c(1,3,5,7,9)
max(x)
#這樣即可求得平均數為 : 5

假如讀取過一個csv文件之後,要求其中一行數據中指定某個區間內的平均數可以使用rowMeans()

data = read.csv(“input.csv",sep=",",header=T)
rowMeans(data[10:17])

補充:R語言-數據框分組求平均值

【技術關鍵】

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("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()

PDF文件的一個好處就是它裡面的圖片是矢量的,也就是說放大圖片不會改變圖片的原樣,原本看上去粘在一塊兒的點放大以後能看出來是分開的。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。

推薦閱讀: