20171205(從有道遷移)
基本數(shù)據(jù)管理
-
創(chuàng)建新變量
- 格式:變量名←表達(dá)式,“表達(dá)式”部分可以包含多種運(yùn)算符和函數(shù)
- 算術(shù)運(yùn)算符可用于構(gòu)造公式(formula)
運(yùn)算符 描述 + 加 - 減 * 乘 / 除 ^或** 求冪 x%%y 求余(x mod y)。5%%2的結(jié)果為1 x%/%y 整數(shù)除法。5%/%2的結(jié)果為2 -
變量重編碼
- 重編碼涉及根據(jù)同一個變量和/或其他變量的現(xiàn)有值創(chuàng)建新值的過程。
- 將一個連續(xù)型變量修改為一組類別值;
- 將誤編碼的值替換為正確值;
- 基于一組分?jǐn)?shù)線創(chuàng)建一個表示及格/不及格的變量。
- 要重編碼數(shù)據(jù),可以使用R中的一個或多個邏輯運(yùn)算符,邏輯運(yùn)算符
邏輯運(yùn)算符 描述 < 小于 <= 小于或等于 > 大于 >= 大于或等于 == 嚴(yán)格等于* != 不等于 !x 非x x y x或y x & y X和y isTRUE(x) 測試x是否為TRUE - 重編碼涉及根據(jù)同一個變量和/或其他變量的現(xiàn)有值創(chuàng)建新值的過程。
-
語句variable[condition] <- expression將僅在condition的值為TRUE時執(zhí)行賦值
- 寫法1:
ageType[age>=55 && age<75]<-"Middle Ages"- 寫法2,需要注意的是,在大括號里面,如果執(zhí)行語句不換行的話,語句之間需要用逗號隔開
leadership <- within(leadership,{ageType=NA ageType[age > 85]<-"Elder" ageType[age>=55 && age<75]<-"Middle Ages" ageType[age<55]<-"Young"}) -
變量的重命名
- 調(diào)出可編輯窗口:fix(變量名)
- reshape包中有一個rename()函數(shù),可用于修改變量名。rename()函數(shù)的使用格式為:rename(dataframe,c(oldname="newname",oldname="newname",...)
- 通過names()函數(shù)來重命名變量
names(leadership)[2] <- "testDate" -
缺失值
- 缺失值以符號NA(Not Available,不可用)表示,缺失值被認(rèn)為是不可比較的;
- 不可能出現(xiàn)的值(例如,被0除的結(jié)果)通過符號NaN(Not a Number,非數(shù)值)來表示;
- 檢測缺失值函數(shù):is.na(),該函數(shù)作用與一個對象時,函數(shù)結(jié)果返回一個相同大小的對象
- ==在分析過程中排除缺失值,多數(shù)的數(shù)值函數(shù)都擁有一個na.rm=TRUE選項(xiàng),可以在計算之前移除缺失值并使用剩余值進(jìn)行計算==
y <- sum(x,na.rm=TRUE)- ==通過函數(shù)na.omit()移除所有含有缺失值的觀測。na.omit()可以刪除所有含有缺失數(shù)據(jù)的行==
newdata <- na.omit(leadership) -
日期值
- 日期值通常以字符串的形式輸入到R中,然后轉(zhuǎn)化為以數(shù)值形式存儲的日期變量;
- 函數(shù)as.Date()用于執(zhí)行這種轉(zhuǎn)化。其語法為as.Date(x, "input_format"),其中x是字符型數(shù)據(jù),input_format則給出了用于讀入日期的適當(dāng)格式
- 日期格式
符號 含義 示例 %d 數(shù)字表示的日期(0~31) 01~31 %a 縮寫的星期名 Mon %A 非縮寫星期名 Monday %m 月份(00~12) 00~12 %b 縮寫的月份 Jan %B 非縮寫月份 January %y 兩位數(shù)的年份 07 %Y 四位數(shù)的年份 2007 - 日期值的默認(rèn)輸入格式為yyyy-mm-dd
mydates <- c("01/05/1965","08/16/1975") strDates <- c("01/05/1965","08/16/1975") mydates2 <- as.Date(c,"%m/%d/%Y") ---使用mm/dd/yyyy的格式讀取數(shù)據(jù)- Sys.Date()可以返回當(dāng)天的日期,而date()則返回當(dāng)前的日期和時間
- 以使用函數(shù)format(x, format="output_format")來輸出指定格式的日期值,并且可以提取日期值中的某些部分
today <- Sys.Date() format(today,format="%A %B %d %y")- 在日期值上執(zhí)行算術(shù)運(yùn)算
- 使用函數(shù)difftime()來計算時間間隔,并以星期、天、時、分、秒來表示
chris <- as.Date("1985-04-02") difftime(today,chris,units="week") ---units應(yīng)當(dāng)是“auto”, “secs”, “mins”, “hours”, “days”, “weeks”其中的一個- 將日期轉(zhuǎn)換為字符型變量:
strDates <- as.character(mydates2) -
類型轉(zhuǎn)換
- 類型轉(zhuǎn)換函數(shù),名為is.datatype()這樣的函數(shù)返回TRUE或FALSE,而as.datatype()這樣的函數(shù)則將其參數(shù)轉(zhuǎn)換為對應(yīng)的類型
判斷 轉(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() -
數(shù)據(jù)排序
- 使用order()函數(shù)對一個數(shù)據(jù)框進(jìn)行排序。
- 默認(rèn)的排序順序是升序。
- 在排序變量的前邊加一個減號即可得到降序的排序結(jié)果
newdata <- leadership[order(leadership$age),] newdata2 <- leadership[order(leadership$age,leadership$q1),] newdata3 <- leadership[order(leadership$age,-leadership$q1),] -
數(shù)據(jù)集的合并
- 添加列
- 橫向合并兩個數(shù)據(jù)框(數(shù)據(jù)集),使用merge()函數(shù)
- 在多數(shù)情況下,兩個數(shù)據(jù)框是通過一個或多個共有變量進(jìn)行聯(lián)結(jié)的(即一種內(nèi)聯(lián)結(jié),inner join)。
total <- merge (dataframe1,dataframe2,by="id") total <- merge (dataframe1,dataframe2,by=c("id","country"))- 如果要直接橫向合并兩個矩陣或數(shù)據(jù)框,并且不需要指定一個公共索引,那么可以直接使用cbind()函數(shù):
total <- cbing(a,b)- cbing()函數(shù)將橫向合并對象A和對象B。為了讓它正常工作,每個對象必須擁有相同的行數(shù),且要以相同順序排序。
- 添加行
- 要縱向合并兩個數(shù)據(jù)框(數(shù)據(jù)集),使用rbind()函數(shù)
total <- rbing(a,b)- 兩個數(shù)據(jù)框必須擁有相同的變量,不過它們的順序不必一定相同。
- 如果dataframeA中擁有dataframeB中沒有的變量,請?jiān)诤喜⑺鼈冎白鲆韵履撤N處理:
- 刪除dataframeA中的多余變量;
- 在dataframeB中創(chuàng)建追加的變量并將其值設(shè)為NA(缺失)。
- 縱向聯(lián)結(jié)通常用于向數(shù)據(jù)框中添加觀測。
- 添加列
-
數(shù)據(jù)集取子集
- 選入(保留)變量:從一個大數(shù)據(jù)集中選擇有限數(shù)量的變量來創(chuàng)建一個新的數(shù)據(jù)
- 數(shù)據(jù)框中的元素是通過dataframe[row indices, column indices]這樣的記號來訪問的??梢匝赜眠@種方法來選擇變量
- 使用paste()函數(shù)
- 剔除(丟棄)變量: 類似myvars <- names(leadership) %in% c("q3","q4")
- 選入觀測:選入或剔除觀測(行)通常是成功的數(shù)據(jù)準(zhǔn)備和數(shù)據(jù)分析的一個關(guān)鍵方面
- subset函數(shù):是選擇變量和觀測
newdata <- subset(leadership, age >= 35 | age < 24,select=c(q1, q2, q3, q4)) newdata <- subset(leadership, gender=="M" & age > 25,select=gender:q4)- 隨機(jī)抽樣
- sample()函數(shù)能夠從數(shù)據(jù)集中(有放回或無放回地)抽取大小為n的一個隨機(jī)樣本; sample()函數(shù)會返回隨機(jī)抽樣得到的元素,之后即可用于選擇數(shù)據(jù)框中的行。
- 格式:
mysample <- leadership[sample[1:nrow(leadership),3,replace=FALSE],]- sample()函數(shù)中的第一個參數(shù)是一個由要從中抽樣的元素組成的向量。在這里,這個向量是1到數(shù)據(jù)框中觀測的數(shù)量
- 第二個參數(shù)是要抽取的元素數(shù)量;
- 第三個參數(shù)表示無放回抽樣。
- 使用 SQL 語句操作數(shù)據(jù)框,sqldf包
- 選入(保留)變量:從一個大數(shù)據(jù)集中選擇有限數(shù)量的變量來創(chuàng)建一個新的數(shù)據(jù)