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

數(shù)據(jù)框中創(chuàng)建添加心變量的三種方式,其實(shí)第一種和第二種是完全一樣的,第三種使用
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中一個(gè)或多個(gè)邏輯值運(yùn)算符。能夠返回邏輯值


需要將其中的年齡變量重新編碼,99歲的年齡值重編碼為缺失值:
leadership$age[leadership$age == 99] <- NA
接著使用以下代碼創(chuàng)建重編碼之后的新變量:
# within()和with()函數(shù)類似,不同在于within()函數(shù)可以修改數(shù)據(jù)框。
變量[原始變量邏輯運(yùn)算] <- 表達(dá)式
leadership <- within(leadership,{
agecat <- NA
agecat[age > 75] <- "Elder"
agecat[age >= 55 & age <= 75] <- "Middle Aged"
agecat[age < 55] <- "Young" })
4.3 變量的重命名
- 如果對(duì)現(xiàn)有的變量名不滿意,那么就可以交互或者編程的方式進(jìn)行修。
fix(數(shù)據(jù)框)來調(diào)用一個(gè)交互式的編輯器,圖形化界面,修改就可以。 -
names()函數(shù)來重命名變量。如names(leadership)[2] <- "testDate"可以將date重新命名為testDate。 - 此外還有plyr包中的一個(gè)
rename()函數(shù),可用于修改變量名。
4.4 缺失值(NA)
- R提供了一些函數(shù),用于識(shí)別包含缺失值的觀測。比如
is.na()函數(shù)可以檢測是否存在缺失值,如果存在,則將被在相應(yīng)位置返回TRUE值。 - 在數(shù)據(jù)分析之前,以某種方式刪除缺失值。含有缺失值的算術(shù)表達(dá)式和函數(shù)的計(jì)算結(jié)果都是缺失值。大多數(shù)函數(shù)擁有一個(gè)
na.rm=TRUE選項(xiàng),可以在計(jì)算之前移除缺失值并使用剩余的值計(jì)算 - 還可以通過
na.omit()函數(shù)刪除所有含有缺失數(shù)據(jù)的行。行刪除,是處理不完整數(shù)據(jù)集的若干手段之一。
4.5 日期值
日期值通常以字符串的形式輸入到R中,然后轉(zhuǎn)化為以數(shù)值形式存儲(chǔ)的日期變量。函數(shù)as.Data()用于執(zhí)行這種轉(zhuǎn)化。語法:as.Data(x, "input_format"),其中x是字符型數(shù)據(jù),input_format則給出了用于讀入日期的適當(dāng)格式。
使用指定格式讀取字符型變量,并將其作為一個(gè)日期變量替換到數(shù)據(jù)框中。這種轉(zhuǎn)換一旦完成,就可以使用諸多方法對(duì)這些日期進(jìn)行分析和繪圖。
Sys.Date()和date()分別是可以返回當(dāng)天的日期和當(dāng)前日期和時(shí)間的函數(shù)。
函數(shù)format(x, format="output_format")可以輸出指定格式的日期值,并且可以提取日期中的某些部分。
today <- Sys.Date()
format(today, format="%B %d %Y")
format(today, format="%A")
R的內(nèi)部在存儲(chǔ)日期時(shí),是使用自1970年1月1日以來的天數(shù)表示的,更早的日期為負(fù)數(shù)。所以可以在日期值上執(zhí)行算術(shù)運(yùn)算。
startdate <- as.Date("2004-02-13")
enddate <- as.Date("2009-06-22")
days <- enddate - startdate
用difftime()來計(jì)算時(shí)間間隔,并以星期、天、時(shí)、分、秒來表示
today <- Sys.Date()
dob <- as.Date("1956-10-12")
# units參數(shù)來指定表示方式,這里是weeks
difftime(today, dob, units="weeks")
當(dāng)然,也可以將日期轉(zhuǎn)換為字符型變量。函數(shù)as.character()可將日期值轉(zhuǎn)換為字符型。一旦轉(zhuǎn)換完成,可以用一系列字符處理函數(shù)處理數(shù)據(jù)。此外,lubridate包和timeDate包也提供了大量的日期處理函數(shù),可以對(duì)日期進(jìn)行運(yùn)算。


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

4.7 數(shù)據(jù)排序
order()函數(shù)可以對(duì)一個(gè)數(shù)據(jù)框進(jìn)行排序,默認(rèn)的排序順序是升序。在排序變量的前邊加一個(gè)減號(hào),即可以得到降序的結(jié)果。一般是由女性到男性。
4.8 數(shù)據(jù)集的合并
- 要橫向合并兩個(gè)數(shù)據(jù)框,要使用
merge()函數(shù)。大多數(shù)情況下,兩個(gè)數(shù)據(jù)框是通過一個(gè)或者多個(gè)變量聯(lián)結(jié)的。total <- merge(dataframeA, dataframeB, by = "ID")就是通過ID將兩個(gè)數(shù)據(jù)框合并。類似的橫向聯(lián)結(jié)通常用于向數(shù)據(jù)框中添加變量,此外cbind()進(jìn)行直接橫向合并,每個(gè)對(duì)象要有相同的行數(shù)以同樣順序排列。 -
rbind()可以縱向合并兩個(gè)數(shù)據(jù)框,但兩個(gè)數(shù)據(jù)框必須擁有相同的變量,順序不必相同。
4.9 數(shù)據(jù)集取子集
- 保留變量:我們經(jīng)常會(huì)從大數(shù)據(jù)集中選取小數(shù)據(jù)集,可以通過下標(biāo)的方式來選擇變量。下標(biāo)留空,表示選擇所有的行或者列。
- 剔除變量:
# 首先生成所有變量名的字符型向量,返回一個(gè)邏輯向量,匹配q3和q4的為TRUE值,最后用!將邏輯值反轉(zhuǎn),最后選擇邏輯值為TRUE的列,q3和q4被剔除。
myvars <- names(leadership) %in% c("q3", "q4")
leadership[!myvars]
# 其他的方法也可以剔除,在某一列的下標(biāo)之前加一個(gè)減號(hào)。會(huì)剔除那一列
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)
第四章終于完成學(xué)習(xí),算是對(duì)我之前學(xué)習(xí)的一個(gè)復(fù)習(xí),接下來第五章就是全新的開始了,或許會(huì)更艱難,快要涉及到統(tǒng)計(jì)學(xué)。