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

微博簽到,圖片來自Echart

4.1 創(chuàng)建新變量

在你需要的分析數(shù)據(jù)中,往往要用新的變量或者對現(xiàn)有的變量進行變換:變量名 <- 表達式
而在表達式中,往往包含很多種的運算符和函數(shù):

各種運算符

數(shù)據(jù)框中創(chuàng)建添加心變量的三種方式,其實第一種和第二種是完全一樣的,第三種使用transform()函數(shù)來創(chuàng)建新的變量。

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 變量的重編碼

重編碼數(shù)據(jù),可以使用R中一個或多個邏輯值運算符。能夠返回邏輯值

邏輯運算符
作為例子來演示

需要將其中的年齡變量重新編碼,99歲的年齡值重編碼為缺失值:
leadership$age[leadership$age == 99] <- NA
接著使用以下代碼創(chuàng)建重編碼之后的新變量:

# within()和with()函數(shù)類似,不同在于within()函數(shù)可以修改數(shù)據(jù)框。
變量[原始變量邏輯運算] <- 表達式
leadership <- within(leadership,{
  agecat <- NA
  agecat[age > 75] <- "Elder"
  agecat[age >= 55 & age <= 75] <- "Middle Aged"
  agecat[age < 55] <- "Young" })

4.3 變量的重命名

  • 如果對現(xiàn)有的變量名不滿意,那么就可以交互或者編程的方式進行修。fix(數(shù)據(jù)框)來調(diào)用一個交互式的編輯器,圖形化界面,修改就可以。
  • names()函數(shù)來重命名變量。如names(leadership)[2] <- "testDate"可以將date重新命名為testDate。
  • 此外還有plyr包中的一個rename()函數(shù),可用于修改變量名。

4.4 缺失值(NA)

  • R提供了一些函數(shù),用于識別包含缺失值的觀測。比如is.na()函數(shù)可以檢測是否存在缺失值,如果存在,則將被在相應(yīng)位置返回TRUE值。
  • 在數(shù)據(jù)分析之前,以某種方式刪除缺失值。含有缺失值的算術(shù)表達式和函數(shù)的計算結(jié)果都是缺失值。大多數(shù)函數(shù)擁有一個na.rm=TRUE 選項,可以在計算之前移除缺失值并使用剩余的值計算
  • 還可以通過na.omit()函數(shù)刪除所有含有缺失數(shù)據(jù)的行。行刪除,是處理不完整數(shù)據(jù)集的若干手段之一。

4.5 日期值

日期值通常以字符串的形式輸入到R中,然后轉(zhuǎn)化為以數(shù)值形式存儲的日期變量。函數(shù)as.Data()用于執(zhí)行這種轉(zhuǎn)化。語法:as.Data(x, "input_format"),其中x是字符型數(shù)據(jù),input_format則給出了用于讀入日期的適當格式。

使用指定格式讀取字符型變量,并將其作為一個日期變量替換到數(shù)據(jù)框中。這種轉(zhuǎn)換一旦完成,就可以使用諸多方法對這些日期進行分析和繪圖。

Sys.Date()date()分別是可以返回當天的日期和當前日期和時間的函數(shù)。
函數(shù)format(x, format="output_format")可以輸出指定格式的日期值,并且可以提取日期中的某些部分。

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

R的內(nèi)部在存儲日期時,是使用自1970年1月1日以來的天數(shù)表示的,更早的日期為負數(shù)。所以可以在日期值上執(zhí)行算術(shù)運算。

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參數(shù)來指定表示方式,這里是weeks
difftime(today, dob, units="weeks")

當然,也可以將日期轉(zhuǎn)換為字符型變量。函數(shù)as.character()可將日期值轉(zhuǎn)換為字符型。一旦轉(zhuǎn)換完成,可以用一系列字符處理函數(shù)處理數(shù)據(jù)。此外,lubridate包和timeDate包也提供了大量的日期處理函數(shù),可以對日期進行運算。

日期格式
我敲這個代碼的時間

4.6 類型轉(zhuǎn)換

R中提供了一系列判斷某個對象的數(shù)據(jù)類型和將其轉(zhuǎn)換為另一種數(shù)據(jù)類型的函數(shù)。is.datatype()這些函數(shù)結(jié)合控制流使用時,將成為一類強大的工具,即允許根據(jù)數(shù)據(jù)的具體類型以不同的方式處理數(shù)據(jù)。

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

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

order()函數(shù)可以對一個數(shù)據(jù)框進行排序,默認的排序順序是升序。在排序變量的前邊加一個減號,即可以得到降序的結(jié)果。一般是由女性到男性。

4.8 數(shù)據(jù)集的合并

  • 要橫向合并兩個數(shù)據(jù)框,要使用merge()函數(shù)。大多數(shù)情況下,兩個數(shù)據(jù)框是通過一個或者多個變量聯(lián)結(jié)的。total <- merge(dataframeA, dataframeB, by = "ID")就是通過ID將兩個數(shù)據(jù)框合并。類似的橫向聯(lián)結(jié)通常用于向數(shù)據(jù)框中添加變量,此外cbind()進行直接橫向合并,每個對象要有相同的行數(shù)以同樣順序排列。
  • rbind()可以縱向合并兩個數(shù)據(jù)框,但兩個數(shù)據(jù)框必須擁有相同的變量,順序不必相同。

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

  • 保留變量:我們經(jīng)常會從大數(shù)據(jù)集中選取小數(shù)據(jù)集,可以通過下標的方式來選擇變量。下標留空,表示選擇所有的行或者列。
  • 剔除變量:
# 首先生成所有變量名的字符型向量,返回一個邏輯向量,匹配q3和q4的為TRUE值,最后用!將邏輯值反轉(zhuǎn),最后選擇邏輯值為TRUE的列,q3和q4被剔除。
myvars <- names(leadership) %in% c("q3", "q4") 
leadership[!myvars]
# 其他的方法也可以剔除,在某一列的下標之前加一個減號。會剔除那一列
newdata <- leadership[c(-8,-9)]
# 將q3和q4設(shè)定為未定義,也可以完成變量刪除工作
leadership$q3 <- leadership$q4 <- NULL
  • subset()函數(shù)是選擇變量和觀測最簡單的方法:
# 選擇了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)

第四章終于完成學習,算是對我之前學習的一個復(fù)習,接下來第五章就是全新的開始了,或許會更艱難,快要涉及到統(tǒng)計學。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

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