1. 程式人生 > >R教材3 資料管理

R教材3 資料管理

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