R语言入门--第三节(data.frame数据框探索)

主要基于data.frame类型,介绍初阶的数据管理知识点

要点一、调整结构

1、编辑变量名

#法1
fix(mydata)  #调出交互编辑器,直接修改
#法2 编程方式
names(mydata)  #可返回所有变量名(列名)= colnames()
names(mydata)[2] = "2"
names(mydata)[2:5]=c("2","3","4","5")   #修改变量名

如果数据表比较大,变量名较多,可直接指定变量名修改;需要安装一个包plyr

mydata <- rename(mydata,
                c(2="q2", 3="q3"))
# oldname="newname"

2、创建新变量(列)

#法1
mydata <- data.frame(x1 = c(2, 2, 6, 4),
                   x2 = c(3, 4, 2, 8))
mydata$sumx <- mydata$x1 + mydata$x2
mydata$meanx <- (mydata$x1 + mydata$x2)/2
#法2
attach(mydata)
mydata$sumx <- x1 + x2
mydata$meanx <- (x1 + x2)/2
detach(mydata)
#法3 (作者推荐)
mydata <- transform(mydata,
                    sumx = x1 + x2,
                    meanx = (x1 + x2)/2)
  • 补充:一些实用运算符
    +-*/ 四则远算
    ^或者** 指数幂运算
    9%%2 求余数,返回1
    9%/%2 返回4

3、合并数据框

  • 按列合并,添加变量
#法1,按索引合并(有相同列)
total1=merge(dataframeA,dataframeB,by="ID","Country")
#法2,直接合并
total2=cbind(A,B)    
  • 按行合并,添加观测
total=rbind(A,B)  #必须有相同的变量

4、数据排序

  • order() 默认的排序是升序;在指定变量名前加一个减号即为降序
newdata=leadership[order(leadership$gender),]
newdata=leadership[order(leadership$gender,-leadership$age),]
#存在两个排序依据时,先按第一个整体排序,再按第二个进行微调
#可用attach 方便些

5、数据重编码(比如根据年龄分组)

#首先把列中的明显不合理值编码为缺失项 NA
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" #年轻组
  • 补充1:一些实用比较符
    < <= > >= != 不等于;
    x & y 和;x | y 或 ;!x:用法见上例
  • 补充2:一些包提供了方便的变量重编码函数,如car包的recode()函数、doBy包的recodevar()函数。

要点二、取数据子集

1、选取指定列

newdata1 <- leadership[, c(6:10)]

myvars <- c("q1", "q2", "q3", "q4", "q5")
newdata2 <-leadership[myvars]

2、去除指定列

#法1
myvars <- names(leadership) %in% c("q3", "q4")    #确定要去除的目标
myvars
!myvars
leadership[!myvars]

#法2
mydata=subset(mydata,select = -X) #删除名为X的列
#法3
mydata=mydata[,-1] #删除第1列
mydata <- mydata[c(-3,-4)]  #删除第3、4列

3、观测行操作

  • 3.1 选子集
newdata <- mydata[1:3,]

newdata <- medata[mydata$gender=="M" &
                       mydata$age > 30, ]

#如下可同时挑选指定观测与变量
newdata <- subset(mydata,gender=="M",
                              select=gender:age)
  • 3.2 抽样样本
mysample <-mydata[sample(1:nrow(mydata),3,replace=FALSE),]
# 随机不放回得抽取三份样本

要点三、特殊数据格式

1、缺失值

  • 缺失值NA(Not Available,表示不可用):因该数据未作答,设备故障或其它原因而缺失。
is.na()  #该函数用于检测缺失值
#返回逻辑值,TRUE/FALSE
is.na(leadership[, 6:10]) 
  • 注意:例如类似5/0 返回的是Inf(无穷值), NaN (not a number) 则表示不可能的值。
  • 在分析中排除缺失值的方法
    使用 na,rm=TRUE 参数,多数数值处理函数都有该选项,否则返回的还是NA值;
    na.omit()命令可以直接删除所有含有缺失值的行(观测)。

2、日期格式

  • as.Date() 可将字符串型的日期值,转化为专用的日期型变量,进行日期的有关分析;
#默认输入格式为例如2020-01-11,若不是则需要加以说明
mydate=as.Date("2008-12-06")
class(mydate)
str(mydate)
#如果是其它格式的日期,需要特别说明一下
mydate=as.Date("01/05/1965","%m/%d/%Y")
  • 其它格式说明
    %d -- 日
    %m -- 月份(数字形式) %b -- 缩写英文月份 %B -- 英文月份
    %y -- 年(后两位数) %Y -- 四位数
    %a -- 缩写英文星期 %A -- 英文星期

as.character() 与之相反,可将日期值转换为字符型

小技巧~

  • 想知道某天是周几
format(mydate,format="%A")  #返回星期
  • 今天几号?
Sys.Date()  #可返回今天的日期
date()   #可返回当前的日期和时间
  • 日期加减
#日期格式可以直接加减,也可以使用函数difftime()
difftime(today,someday,units="weeks")  #以周数为单位返回日期差值

3、格式判断与转换

  • 判断函数 ,返回逻辑值。在控制流时有用。
is.numeric()
is.character()
is.vector()
is.matrix()
is.data.frame()
is.factor()
is.logical()
  • 转换,相应的变为as.即可;比如
as.data.frame()

补充:在dplyr包中有一种data.frame简化版的tibble数据框,参考文章,了解下即可(个人认为还是data.frame格式常用)

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

推荐阅读更多精彩内容