走进R语言的世界——简单数据处理
作者:郭小龙,R语言中文社区专栏作者。知乎专栏:https://www.zhihu.com/people/guo-xiao-long-3-18/posts 近期要连续出差,这几天加上周末除了整理出差资料就是在学习R语言,终于按期完成学习任务。前面第一、二章的学习可以算是入门和熟悉,这期简单数据处理则正式开始用R语言进行实战了。因此本关的笔记废话不叙,直奔主题。 1、书本基本数据管理实操练习 (1)生成一个数据框示例 manager <- c(1,2,3,4,5) date <- c("10/24/08","10/28/08","10/1/08","10/12/08","5/1/09") country <- c("US","US","UK","UK") gender <- c("M","F","M","F") age <- c(32,45,25,39,99) q1 <- c(5,2) q2 <- c(4,5,2) q3 <- c(5,1) q4 <- c(5,NA,2) q5 <- c(5,1) leadership <- data.frame(manager,date,country,gender,age,q1,q2,q3,q4,q5,stringsAsFactors = FALSE) (2)创建新变量的3种方法 #第一种方法 mydata <- data.frame(x1 = c(2,6,4),x2=c(3,8)) mydata$sumx <- mydata$x1 + mydata$x2 mydata$meanx <- (mydata$x1 + mydata$x2)/2 #第二种方法 attach(mydata) mydata$sumx <- x1 + x2 mydata$meanx <- (x1 + x2)/2 detach(mydata) #第三种方法 mydata <- transform(mydata,sumx=x1 + x2,meanx=(x1 + x2)/2) (3)变量重编码的2种方法 #变量的重编码(1) leadership$age[leadership$age == 99] <- NA leadership$agecat[leadership$age > 75] <- "Elder" leadership$agecat[leadership$age >= 55 & leadership$age <= 75] <- "Middle Aged" leadership$agecat[leadership$age < 55] <- "Young" #变量的重编码的紧凑写法(2) leadership <- within(leadership,{ ? ? ? ? ? ? ? ? ? ? ?agecat <-NA ? ? ? ? ? ? ? ? ? ? ?agecat[age > 75] ? ? ? ? ? ? ? ?<- "Elder" ? ? ? ? ? ? ? ? ? ? ?agecat[age >=55 & age <=75] ? ? <- "Middle Aged" ? ? ? ? ? ? ? ? ? ? ?agecat[age < 55] ? ? ? ? ? ? ? ?<- "Young" }) (4)变量重命名的3种方法 #变量的重命名(1) fix(leadership) #变量的重命名(2) names((leadership)) names(leadership)[2] <- "testdate" leadership #变量的重命名(3) install.packages("plyr") library(plyr) leadership <- rename(leadership,? ? ? ? ? ? ? ? ? ? c(manager="managerID",date="testdate")) (5)缺失值的检测和排除 #缺失值的检测 is.na(leadership[,6:10]) #在分析中排除缺失值 leadership newdata <- na.omit(leadership) (6)日期格式转化 #日期格式转化 myformat <- "%m/%d/%y" leadership$testdate <- as.Date(leadership$testdate,myformat) leadership (7)数据集的选入和剔除 #数据的升序和降序排序 newdate2 <- leadership[order(leadership$age),] newdate2 newdata3 <- leadership[order(-age),] newdata3 #数据集中取子集 myvars <- c("q1","q2","q3","q4","q5") newdata4 <- leadership[myvars] newdata4 #剔除数据集中的部分变量 myvars1 <- names(leadership) %in% c("q3","q4") newdata1 <- leadership[!myvars1] newdata5 <- leadership[c(-8,-9)] ?#知道被剔除的变量是第几列情况下 newdata5 (8)图形初阶实践 dose <- c(20,30,40,60) drugA <- c(16,20,27,60) drugB <- c(15,18,31,40) #直接键入值修改图形绘制参数 plot(dose,drugA,type="b",lty=3,lwd=3,pch=15,cex=2) #使用plot()和par()组合函数修改图形参数 plot(dose,type = "b") opar <- par(no.readonly = TRUE) par(lty=2,pch=17) plot(dose,type="b") par(opar) #灰度颜色图形绘制 n <- 10 mycolors <- rainbow(n) pie(rep(1,n),labels=mycolors,col=mycolors) mygrays <- gray(0:n/n) pie(rep(1,labels=mygrays,col=mygrays) (1)Excels数据的导入 #读入Excels数据 install.packages("openxlsx") library(openxlsx) readFilepath <- "G:/大数据作业实践和有用资料/第三关作业实践/课件源代码和数据/朝阳医院2016年销售数据.xlsx" excelData <- read.xlsx(readFilepath,1) (2)数据的预处理 ##………………………………………………………………………………数据预处理阶段 #列名重命名 names(excelData) <- c("time","cardno","drugld","drugName","saleNumber","virtualmoney","actualmoney") excelData1 <- excelData[!is.na(excelData$time),] #安装stringr包并对time列截取出年月日部分 install.packages("stringr") library(stringr) timesplit <-str_split_fixed(excelData1$time," ",n=2) excelData1$time <- timesplit[,1] #转化成日期数值类型 fix(excelData1) ? ? ? ?#查看导入后的excelData1中数据存储类型 excelData1$time <- as.Date(excelData1$time,"%Y-%m-%d") class(excelData1$time) excelData1$saleNumber ? ? <- as.numeric(excelData1$saleNumber) excelData1$virtualmoney ? <- as.numeric(excelData1$virtualmoney) excelData1$actualmoney ? ?<- as.numeric(excelData1$actualmoney) #按销售时间进行排序 excelData1 <- excelData1[order(excelData1$time,decreasing = FALSE),] (3)月均消费次数统计 ###月均消费次数统计——————第一项任务 kpi1 <- excelData1[!duplicated(excelData1[,c("time","cardno")]),] consumeNumber <- nrow(kpi1) consumeNumber startTime ?<- ?kpi1$time[1] endTime ? ?<- ?kpi1$time[nrow(kpi1)] day ? ? ? ?<- ?endTime - startTime class(day) day ? ? ? ?<- as.numeric(day) month ? ? ?<- ?day %/% 30 monthConsume ?<- consumeNumber %/% month monthConsume (4)月均消费金额计算 ###月均消费金额计算——————第二项任务 totalMoney ? <- sum(excelData1$actualmoney,na.rm = TRUE) monthMoney ? <- totalMoney / month monthMoney (5)客单价统计 ###客单价----------——————第三项任务 pct ?<- totalMoney /consumeNumber pct ?<- round(pct,2) pct (6)消费趋势图形绘制和最终趋势图 ###消费趋势--------——————第四项任务 week <- tapply(excelData1$actualmoney,? ? ? ? ? ? ? format(excelData1$time,"%Y-%U"),? ? ? ? ? ? ? sum) week <- as.data.frame.table(week) week names(week) <- c("time","actualmoney") week$time ?<- as.character(week$time) week$timeNumber <- c(1:nrow(week)) plot(week$timeNumber,week$actualmoney,? ? xlab = "时间(年份---第几周)",? ? ylab="消费金额",? ? xaxt="n",? ? main="2016年朝阳医院消费曲线",? ? col="blue",? ? type="b") axis(1,at=week$timeNumber,labels = week$times,cex.axis=1.5) (1)学习时将遇到函数列表统计,后期再用到某函数时直接从列表中翻看其用法和功能,省去拿书翻找的时间,方便高效。 (2)代码的目的是实现最终想法,但写法可以是不拘一格、风格迥异的,发现这也是学编程的一大乐趣。 (3)函数的熟练应用和代码编写细节(如“[]”的应用)仍需边实践边加强巩固。 (4)有些函数功能无法使用,首先要检查其功能支持包是否安装,再查看哪些地方出错。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |