R語言實戰(zhàn)4:基本數(shù)據(jù)管理


title: "R數(shù)據(jù)實戰(zhàn)4:基本數(shù)據(jù)管理"
author: "wintryheart"
date: "2019年5月17日"
output:
html_document:
toc: TRUE


knitr::opts_chunk$set(echo = TRUE)

第4章 基本數(shù)據(jù)管理

4.1 數(shù)據(jù)集

manager <- c(1:5)
date <- c("10/24/08", "10/28/08", "10/1/08","10/12/08","5/1/09")
country <- c("US", "US","UK","UK","UK")
gender <- c("M","F","M","F","M")
age <- c(32,45,25,39,99)
q1 <- c(5,3,3,3,2)
q2 <- c(4,5,5,3,2)
q3 <- c(5,2,5,4,1)
q4 <- c(5,5,5,NA,2)
q5 <- c(5,5,2,NA,1)
leadship <- data.frame(manager, date, country, gender, age, q1, q2, q3,q4,q5, stringsAsFactors = FALSE)
leadship

4.2 創(chuàng)建新變量

算術(shù)表達式

運算符 描述
求冪 ^或者**
求余 x%%y
整除 x%/%y
#第一種方式:利用attach()簡化操作
attach(leadship)
leadship$sumq12 = q1+q2
leadship$meanq12 = (q1+q2)/2
detach(leadship)

#第二方式:利用transform()函數(shù)
leadship <- transform(leadship,
                      sumq123 = q1+q2+q3,
                      meanq123 = (q1+q2+q3)/3)

leadship

4.3 變量的重編碼

邏輯表達式

運算符 描述
!= 不等于
!x 非X
x | y x或y
x & y x和y
isTRUE(x) x是否為TRUE
# within()和with()的不同之處在于仙逻,within()允許修改數(shù)據(jù)框。  
leadship$age[leadship$age == 99] <- NA  #將99歲的年齡值編碼為缺失值俗他。
leadship <- within(leadship,{
                   agecat <- NA   #創(chuàng)建新變量笛园,賦值為缺失值
                   agecat[age > 75] <- "Elder"    
                   agecat[age >= 55 & age <=75] <- "Middle Aged"
                   agecat[age <55] <-"Yong"})
leadship  
# 利用car包中的recode()函數(shù)职抡,和doBy包中的recodevar()函數(shù)更為方便箩艺。

4.4 變量重命名

手工修改:fix()函數(shù)調(diào)出交互式操作框

fix(leadship)

笨辦法: names()函數(shù)

names(leadship)[2] <- "textDate"

更好用的方法:plyr包中的rename()函數(shù)

rename(dataframe, c(oldname1="newname1", oldname2="newname2", ... ))

library(plyr)
leadship <- rename(leadship, c(q1="item1", q2="item2",q3="item3",q4="item4",q5="item5"))
leadship

4.5 缺失值

is.na()檢測缺失值是否存在。

is.na(leadship)
  • 類似缺失值的標(biāo)記與檢測
標(biāo)記 含義 檢測 備注
NA 缺失值 is.na()
Inf 正無窮 is.infinite() 5/0返回Inf
-Inf 負無窮 is.infinite()
NaN 不可能的值 is.nan() sin(Inf)不是一個數(shù)
  • 在分析中排除缺失值
    • 很多數(shù)值函數(shù)都有na.rm=TRUE選項荤胁,可以在計算之移除缺失值瞧预,并用剩余值計算。
    • 通過函數(shù)na.omit()移除所有含有缺失值的觀測仅政。
x <- c(1, 2, NA, 3)
y <- sum(x)
z <- sum(x, na.rm=TRUE)
print(list(x=x, y=y, z=z))

newdata <- na.omit(leadship)
newdata

4.6 日期值

日期格式

符號 含義 示例
%d 數(shù)字表示的日期(0~31) 01-31
%a 縮寫的星期名 Mon
%A 非縮寫的星期名 Monday
%m 數(shù)字表示的月份(01~12) 01
%b 縮寫的月份 Jan
%B 非縮寫的月份 January
%y 兩位數(shù)的年份 07
%Y 四位數(shù)的年份 2007
  • 日期的默認輸入格式為:yyyy-mm-dd
  • 按指定格式讀裙赣汀:as.Date(object, "myfomats")
  • 按指定格式輸出:format(object, format="output_format")
  • 日期值可以執(zhí)行算術(shù)運算。
  • 函數(shù)difftime()可以計算以星期圆丹、天滩愁、時、分和秒表示的時間間隔辫封,默認為天硝枉。
  • 日期型轉(zhuǎn)換成字符型:as.character()
#默認輸入格式
mydates1 <- as.Date(c("2007-01-09", "2019-03-14"))

#按指定格式讀取
strDates <- c("01/15/1965","05/12/1970")
mydates2 <- as.Date(strDates, "%m/%D/%Y")

#按指定的格式輸出
Sys.Date()
date()
today <- Sys.Date()
format(today, format="%B %d日 %Y年")
format(today, format="%A")

#日期算術(shù)運算
startdate <- as.Date("1979-10-22")
enddate <- Sys.Date()
days <- enddate-startdate
days

#計算時間間隔
difftime(enddate, startdate)
difftime(enddate, startdate, units="weeks")

4.7 類型轉(zhuǎn)換

類型轉(zhuǎn)換函數(shù)

判斷 轉(zhuǎn)換
is.numeric() as.numeric()
is.character() as.character()
is.vector() as.vector()
is.matrix() as.matrix()
is.data.frame() as.data.frame()
is.factor() as.factor()
is.logical() as.logical()

4.8 數(shù)據(jù)排序

  • 使用order()函數(shù)對數(shù)據(jù)框進行排序。默認為升序倦微。
  • 在排序變量前加一個負號妻味,就變?yōu)榻敌颉?/li>
attach(leadship)

newdata1 <- leadship[order(gender,age),]

newdata2 <- leadship[order(gender, -age),]

print(list(newdata1, newdata2))  #NA比數(shù)字大。

detach(leadship)

4.9 數(shù)據(jù)集合并

合并方向 函數(shù) 說明
添加列 merge() 通過一個或多個共有變量聯(lián)結(jié),by="共有變量"
添加列 cbind() 沒有共有變量
添加行 rbind()

4.10 數(shù)據(jù)集取子集

4.10.1 保留變量

myvars <- c("q1","q2","q3","q4","q5")
或者
myvars <- paste("q", 1:5, sep="")

newdatas <- leadship[myvars]

4.10.2 剔除變量

使用邏輯判斷

# names(leadship)生成一個包含所有變量名的字符型向量璃诀。
# %in%返回一個邏輯型向量弧可,匹配c()中元素的值為TRUE,否則為FASLE。
myvars <- names(leadship) %in% c("sumq12", "meanq12")
# !myvars 反向邏輯判斷棕诵。
# sumq12和meanq12被剔除
newdata <- leadship[!myvars]
newdata

# 通過設(shè)為未定義(NULL)來剔除變量
newdata$sumq123 <- newdata$meanq123 <- NULL
newdata

4.10.3 選擇觀測

  • 方法1:利用行下標(biāo)

newdatas <- leadship[1:3, ]

  • 方法2:利用邏輯判斷篩選

attach(leadship)
newdats <- leadship[gender == "M" & age>30]
detach(leadship)

4.10.4 subset()函數(shù)同時選擇變量和觀測

newdata3 <- subset(leadship, age>30, select=c(q1,q2,q3))

newdata4  <-  subset(leadship, age>30 & gender=="M", select=q1:q4)   #支持from:to冒號運算符

print(list(newdata3, newdata4))

4.10.5 隨機抽樣


#第一個參數(shù)1:nrow(leadship)確定被抽樣的總體
#第二個參數(shù)3確定抽樣規(guī)模
#第三個參數(shù)replace=FALSE表示無放回抽樣裁良。
mysample <- leadship[sample(1:nrow(leadship), 3, replace=FALSE)]

mysample

#更復(fù)雜的抽樣工具參見sampling包和survey包。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末校套,一起剝皮案震驚了整個濱河市价脾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌笛匙,老刑警劉巖侨把,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異妹孙,居然都是意外死亡秋柄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門蠢正,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骇笔,“玉大人,你說我怎么就攤上這事嚣崭”看ィ” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵雹舀,是天一觀的道長芦劣。 經(jīng)常有香客問我,道長说榆,這世上最難降的妖魔是什么虚吟? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮娱俺,結(jié)果婚禮上稍味,老公的妹妹穿的比我還像新娘。我一直安慰自己荠卷,他們只是感情好模庐,可當(dāng)我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著油宜,像睡著了一般掂碱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上慎冤,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天疼燥,我揣著相機與錄音,去河邊找鬼蚁堤。 笑死醉者,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播撬即,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼立磁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了剥槐?” 一聲冷哼從身側(cè)響起唱歧,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粒竖,沒想到半個月后颅崩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡蕊苗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年沿后,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朽砰。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡得运,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锅移,到底是詐尸還是另有隱情,我是刑警寧澤饱搏,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布非剃,位于F島的核電站,受9級特大地震影響推沸,放射性物質(zhì)發(fā)生泄漏备绽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一鬓催、第九天 我趴在偏房一處隱蔽的房頂上張望肺素。 院中可真熱鬧,春花似錦宇驾、人聲如沸倍靡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽塌西。三九已至,卻和暖如春筝尾,著一層夾襖步出監(jiān)牢的瞬間捡需,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工筹淫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留站辉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像饰剥,于是被迫代替她去往敵國和親殊霞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 我們的掌握目標(biāo): ●操縱日期和缺失值 ●熟悉數(shù)據(jù)類型的轉(zhuǎn)換 ●變量的創(chuàng)建和重編碼 ●數(shù)據(jù)集的排序捐川、合并與取并集 ●...
    小白日常筆記閱讀 745評論 0 0
  • 基本數(shù)據(jù)管理 在前面的章節(jié)中脓鹃,我們討論了多種導(dǎo)入數(shù)據(jù)到R中的方法。遺憾的是古沥,將你的數(shù)據(jù)表示為矩陣或數(shù)據(jù)框這樣的矩形...
    jplee閱讀 1,622評論 0 2
  • 為了解決感興趣的問題瘸右,我們首先必須解決一些數(shù)據(jù)管理方面的問題。 4.2 創(chuàng)建新變量 在典型的研究項目中岩齿,你可能需要...
    在雨中跳舞閱讀 1,569評論 2 1
  • 數(shù)據(jù)分析中最重要的并不是如何敲代碼太颤,如何收集數(shù)據(jù),而是數(shù)據(jù)分析前的準(zhǔn)備——數(shù)據(jù)導(dǎo)入盹沈,數(shù)據(jù)框架的構(gòu)建龄章、數(shù)據(jù)的基礎(chǔ)處理...
    白馬少年說閱讀 1,969評論 5 7
  • 由于剛接觸Linux不久,安裝各種各樣的插件都出許多問題乞封! 1.在安裝mysql后做裙,可能啟動不了 比如:Can't...
    Lenvaco1998閱讀 230評論 0 0