R教材3 資料管理
阿新 • • 發佈:2018-11-26
- 根據原物件建立新變數,物件=transform(物件,新變數)
- 變數的重編碼variable[condition]<-expression,變數的下標運算子設定條件,當condition為T時則執行賦值;within(物件,{新變數[原變數的判斷條件]=新值}),建立新物件,{}內為執行語句
- cut(列物件,breaks=quantile(列物件,probs=c(0.0,0.3,0.7,1.0)),include.lowest = T),include.lowest是否包含最小值,數值變數離散化且轉化為因子
- 變數的重新命名names(物件)[]<-新命名,names通過下標運算子找到屬性名並修改
- fix方法最直接
- plyr包中的rename(dataframe,c(oldname="newname",……))
- 缺失值處理:NA缺失值、NaN異常值、Inf、-Inf正負無窮大;R中字元型和數值型資料使用的缺失值符號是相同的,這與SAS等程式不同;缺失值無法比較
- 識別缺失資料
- 先把異常值重編碼為缺失值,is.nan()
- is.na檢驗每個資料是否為缺失值,返回相同大小的T和F的物件、complete.case檢驗每個觀測(行)是否為缺失值
- *mice包中的pattern方法:md.pattern()按行列合計缺失值資訊
- *圖象方法:VIM包中的aggr(資料,prop=F,number=TRUE)、matrixplot()
- 處理缺失值
- 確定缺失值是否有業務含義
- 刪除
- 行刪除,直接清理檔案(可能只使用到完整列),na.omit()
- 配對刪除,檔案資料使用到時有缺失值才刪除行,cor(sleep,use="pairwise.complete.obs")求相關係數,自動去除有缺失值的記錄
- 替換mean(x,na.rm=T),去除NA再計算;根據資料的分佈,正態分佈可用均值代替,偏態可用中位數代替,或者屬性之間的聯絡可以用迴歸推斷缺失值
- 識別缺失資料
- 日期值as.Date(物件,“讀入的格式”),日期值一般以字串形式傳入R中,要轉化為日期變數
- format(物件,format=“”)對日期物件修改其格式(其他物件也可以)
- difftime(,,units="weeks")計算日期間隔,以周為單位
- *這裡用到的是as.資料型別(),顯式轉換
- 型別轉換
- 判斷is.資料型別()
- 顯式轉換as.資料型別()
- 隱式轉換c(1,T,'abc'),直接都轉換為character
- factor()轉換為因子
- 資料排序,物件[order(排序屬性)],在排序屬性前加-使其降序
- 資料集合並
- 新增列merge(dataframe1,dataframe2,by=“連線屬性”,all.x=T),即inner join,內聯接;即vlookup
- cbind(),列聯合,必須有相同的行數和排序
- 新增行rbind(),必須有相同的變數,順序不必一樣
- 提取子集
- 保留變數,下標運算子選擇列[]
- 丟棄變數
- 下標運算子[!names(資料框) %in% c(列名)]、[c(-8,-9)]去除8和9列
- 列<-NULL,,這裡的NULL和NA是不同的
- 選擇行,物件[條件,]
- 最簡單的選擇subset(物件,屬性條件,select=),過濾出物件,其屬性條件,select特定列
- 隨機抽樣
- sample(1:nrow(airquality),size=10,replace=T),返回行號,nrow()計算行數,size抽取數,replace是否放回;dataframe[sample(),]
- set.seed,為偽隨機數設定種子
- 利用SQL語句sqldf包中的sqldf()
- sqldf("sql語句",row.names=T),保留行名