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文件的一个好处就是它里面的图片是矢量的,也就是说放大图片不会改变图片的原样,原本看上去粘在一块儿的点放大以后能看出来是分开的。

  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值