第四章 基本数据管理

微博签到,图片来自Echart

4.1 创建新变量

在你需要的分析数据中,往往要用新的变量或者对现有的变量进行变换:变量名 <- 表达式
而在表达式中,往往包含很多种的运算符和函数:

各种运算符

数据框中创建添加心变量的三种方式,其实第一种和第二种是完全一样的,第三种使用transform()函数来创建新的变量。

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
attach(mydata)
mydata$sumx <- x1 + x2
mydata$meanx <- (x1 + x2)/2
detach(mydata)
mydata <- transform(mydata,
                    sumx = x1 + x2,
                    meanx = (x1 + x2)/2)

4.2 变量的重编码

重编码数据,可以使用R中一个或多个逻辑值运算符。能够返回逻辑值

逻辑运算符
作为例子来演示

需要将其中的年龄变量重新编码,99岁的年龄值重编码为缺失值:
leadership$age[leadership$age == 99] <- NA
接着使用以下代码创建重编码之后的新变量:

# within()和with()函数类似,不同在于within()函数可以修改数据框。
变量[原始变量逻辑运算] <- 表达式
leadership <- within(leadership,{
  agecat <- NA
  agecat[age > 75] <- "Elder"
  agecat[age >= 55 & age <= 75] <- "Middle Aged"
  agecat[age < 55] <- "Young" })

4.3 变量的重命名

  • 如果对现有的变量名不满意,那么就可以交互或者编程的方式进行修。fix(数据框)来调用一个交互式的编辑器,图形化界面,修改就可以。
  • names()函数来重命名变量。如names(leadership)[2] <- "testDate"可以将date重新命名为testDate。
  • 此外还有plyr包中的一个rename()函数,可用于修改变量名。

4.4 缺失值(NA)

  • R提供了一些函数,用于识别包含缺失值的观测。比如is.na()函数可以检测是否存在缺失值,如果存在,则将被在相应位置返回TRUE值。
  • 在数据分析之前,以某种方式删除缺失值。含有缺失值的算术表达式和函数的计算结果都是缺失值。大多数函数拥有一个na.rm=TRUE 选项,可以在计算之前移除缺失值并使用剩余的值计算
  • 还可以通过na.omit()函数删除所有含有缺失数据的行。行删除,是处理不完整数据集的若干手段之一。

4.5 日期值

日期值通常以字符串的形式输入到R中,然后转化为以数值形式存储的日期变量。函数as.Data()用于执行这种转化。语法:as.Data(x, "input_format"),其中x是字符型数据,input_format则给出了用于读入日期的适当格式。

使用指定格式读取字符型变量,并将其作为一个日期变量替换到数据框中。这种转换一旦完成,就可以使用诸多方法对这些日期进行分析和绘图。

Sys.Date()date()分别是可以返回当天的日期和当前日期和时间的函数。
函数format(x, format="output_format")可以输出指定格式的日期值,并且可以提取日期中的某些部分。

today <- Sys.Date()
format(today, format="%B %d %Y")
format(today, format="%A")

R的内部在存储日期时,是使用自1970年1月1日以来的天数表示的,更早的日期为负数。所以可以在日期值上执行算术运算。

startdate <- as.Date("2004-02-13")
enddate   <- as.Date("2009-06-22")
days <- enddate - startdate

difftime()来计算时间间隔,并以星期、天、时、分、秒来表示

today <- Sys.Date()
dob <- as.Date("1956-10-12")
# units参数来指定表示方式,这里是weeks
difftime(today, dob, units="weeks")

当然,也可以将日期转换为字符型变量。函数as.character()可将日期值转换为字符型。一旦转换完成,可以用一系列字符处理函数处理数据。此外,lubridate包和timeDate包也提供了大量的日期处理函数,可以对日期进行运算。

日期格式
我敲这个代码的时间

4.6 类型转换

R中提供了一系列判断某个对象的数据类型和将其转换为另一种数据类型的函数。is.datatype()这些函数结合控制流使用时,将成为一类强大的工具,即允许根据数据的具体类型以不同的方式处理数据。

类型转换函数

4.7 数据排序

order()函数可以对一个数据框进行排序,默认的排序顺序是升序。在排序变量的前边加一个减号,即可以得到降序的结果。一般是由女性到男性。

4.8 数据集的合并

  • 要横向合并两个数据框,要使用merge()函数。大多数情况下,两个数据框是通过一个或者多个变量联结的。total <- merge(dataframeA, dataframeB, by = "ID")就是通过ID将两个数据框合并。类似的横向联结通常用于向数据框中添加变量,此外cbind()进行直接横向合并,每个对象要有相同的行数以同样顺序排列。
  • rbind()可以纵向合并两个数据框,但两个数据框必须拥有相同的变量,顺序不必相同。

4.9 数据集取子集

  • 保留变量:我们经常会从大数据集中选取小数据集,可以通过下标的方式来选择变量。下标留空,表示选择所有的行或者列。
  • 剔除变量:
# 首先生成所有变量名的字符型向量,返回一个逻辑向量,匹配q3和q4的为TRUE值,最后用!将逻辑值反转,最后选择逻辑值为TRUE的列,q3和q4被剔除。
myvars <- names(leadership) %in% c("q3", "q4") 
leadership[!myvars]
# 其他的方法也可以剔除,在某一列的下标之前加一个减号。会剔除那一列
newdata <- leadership[c(-8,-9)]
# 将q3和q4设定为未定义,也可以完成变量删除工作
leadership$q3 <- leadership$q4 <- NULL
  • subset()函数是选择变量和观测最简单的方法:
# 选择了q1到q4中,年龄大于等于或者小于24的观测值
newdata <- subset(leadership, age >= 35 | age < 24,
                  select=c(q1, q2, q3, q4))
# 选择了gender到q4变量中,年龄大于25的男性的观测值
newdata <- subset(leadership, gender=="M" & age > 25,
                  select=gender:q4)

第四章终于完成学习,算是对我之前学习的一个复习,接下来第五章就是全新的开始了,或许会更艰难,快要涉及到统计学。

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

推荐阅读更多精彩内容