R基础(5):简单数据处理

前面四章讲到了R和Rstudio的安装,Rstudio的基本使用方法,各种数据的导入和导出、R语言数据类型和数据结构,如果你已经较为熟练的掌握了R的这些基本知识,你们现在就可以正式开始我们的数据分析工作了。
数据分析包括数据的采集、处理、分析、可视化。
这一章主要讲解数据分析的第二步——数据处理。数据处理是每一个数据分析师拿到数据所做的第一步。因为几乎没有一份数据到我们的手中时,所有的内容都是我们满意的,而且处理后的数据即相当于从大量信息中剔除噪音,让我们获取更多的信息。
我推荐《R语言实战》这本书作为新手的入门书,里面的内容很详细,适合新手学习。
我对于简单数据处理的思路分为7块,分别是数据概览、修改、添加、删除、排序、合并、选入观测。

1、数据概览
在拿到数据之前第一步要做的就是概览数据
head(df,n=10)#查看数据集的前十条记录
str(df)#查看数据集结构
tail(df)#查看数据集最后部分
sapply(df)#查看数据集类型及名称
summary(df)#查看数据集各变量描述统计
……

供练习数据集
name1 <- c("Bob","Mary","Jane","Kim")
name2 <- c("Bob","Mary","Kim","Jane")
weight <- c(60,65,45,55)
height <- c(170,165,140,135)
birth <- c("1990-1","1980-2","1995-5","1996-4")
accept <- c("no","ok","ok","no")
df1 <- data.frame(name1,weight,height)
df2 <- data.frame(name2,birth,accept,stringsAsFactors = F)
2、数据修改
数据修改主要包括变量的重编码、重命名,数据格式的改变,数据位置的调整,
2.1变量的重编码
1)将df1中Kim的身高改为165
df1$height[name1=='Kim] <- 165
2)将体重按定性变量定义,小于等50kg为thin,51到60kg为normal,大于60kg为fat
df1$weight[weight <= 50] <- 'thin'
df1$weight[weight > 50 & weight <=60] <- 'normal'
df1$weight[weight > 60] <- 'fat'
2.2变量的重命名
为了方便处理、或是更好的表示数据特征,我们需要更改变量名称,常用函数为names()
names(df1)#查看所有变量名
names(df1)[2] <- 'size'#把变量‘weight’改为‘size’
2.3更改数据格式、类型
1)更改日期格式
日期格式的默认格式为yyyy-mm-dd
Sys.Date()#查看系统日期
today <- Sys.Date()
format(today,"%d %a %b")#输出格式为[1] "2017-06-20"这是我的写作日期,将日期格式修改为%d %a %b
补充:format()可以用于转换数据格式,包括小数、科学计算方法等等。
2)更改更多数据类型


image.png

is.datatype()函数查询数据类型,返回TRUE或FALSE。而as.datatype()函数则转换为对应的类型。
3)缺失值处理
is.na(df1$weight)#判断缺失值
df1$weight <-NA#改为缺失值
data=data.frame(y=c(1,2,3,NA,5,6),x1=c(6,NA,4,3,2,1),x2=c(1,3,6,9,12,NA))
attach(data)
y[is.na(y)]=mean(y,na.rm=T)
x1[is.na(x1)]=mean(x1,na.rm=T)
x2[is.na(x2)]=mean(x2,na.rm=T)
data=data.frame(y,x1,x2)#把缺失值修改为平均值

3.数据的添加
数据的添加包括添加字段(变量)、记录
1)添加变量(列)
df2 <- transform(df1,BMI=weight/height^2)#第一种方法
df1$BMI <- df1$weight/df1$height^2#第二种方法
2)添加记录(行)
添加记录在R中较麻烦,需要新建数据框,合并原有数据框,放在合并那块细讲。

4.数据的删除
数据的删除包括删除字段、记录、缺失值等
1)删除字段(列)
df2[-c(2,4)]
df2[c(-2,-4)]
df2[c(T,F,T,F)]
以上方式皆相同,都为直接删除列
df2$weight <- df2$BMI <-NULL#将列定义为缺失值,从而删除列
%in%表示返回逻辑型向量,出df2中的birth、accept为F,其他皆为T
myvars <- names(df2) %in% c('birth','accept')
df2 <- df2[!myvars]#!表示相反
2)删除记录(行)
df2[!accept=='no',]#删除含特定值的行,这里讲不接受的人删除
3)删除含缺失值的行
na.omit()后者

5.数据的排序
1)R自带函数的排序方法
df1[order(df1$weight),]#升序
df1[order(-df1$height),]#降序
df3 <- data.frame(name1,weight,height,accept,stringsAsFactors=F)
df3[order(df3$accept,df3$weight),]#按照是否接受进行体重升序
2)dplyr包排序方法
library(dplyr)
arrange(df3,accept,weight)#按照是否接受进行升序

6.合并数据集
1)合并merge()
merge(df1,df2,by='name1') #按name1,合并df1、df2
merge(df1,df2,by='name1',all=T) #保留缺失值
另外还有两种常见的合并函数:行合并rbind(),列合并cbind()
dplyr包高效合并
bind_rows(df1,df2)#区别rbind(df1,df2)
bind_cols(df1,df2)
2)整合aggregate()
aggregate(df,by=list(col1,col2…),FUN)#根据col1、col2的变量添加FUN函数,整合数据框。
3)重铸reshape()
'''names(airquality) <- tolower(names(airquality))
View(airquality)
aqm <- melt(airquality,id=c("month","day"),na.rm = T)#融合,na.rm=T不显示空值
aqm1 <- melt(airquality,id=c("month","day"),na.rm = F)#显示空值
dcast(aqm,day+variable~month)#重铸,R语言实战第五章P.107
dcast(aqm,variable+day~month)
dcast(aqm,day~variable+month)
dcast(aqm,day~month,mean)#计算变量variable均值
dcast和acast用法相似,dcast会把分组信息作为一列或者几列显示,acast会将其作为行名
dcast(aqm,variable+month~day)
acast(aqm,variable+month~day)
acast(aqm,day~month,mean)
acast(aqm,variablemonthday)#生成一个三维矩阵,按照day分成31个矩阵
install.packages('tidyr')'''
用的很少,这里就几个例子,下次遇到再补充。

7.选入观测
1)观测特定列
df1[,c(1,2)]
2)观测特定行
subset(df1,df1$weight>=50|df1$weight<=60,select = c('name1'))

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容