R提高篇(四): 數據管理二

来源:http://www.cnblogs.com/tgzhu/archive/2016/10/13/5951651.html
-Advertisement-
Play Games

目錄: 數學函數 統計函數 應用示例 控制流 數學函數 ceiling(x): 大於等於 x 的最小整數, 如: ceiling(3.213) --> 4 floor(x): 小於等於 x 的最大整數,如: floor(3.6534) --> 3 trunc(x): 取x的整數部分, 如: trun ...


目錄:

  • 數學函數
  • 統計函數
  • 應用示例
  • 控制流

數學函數


  • ceiling(x):  大於等於 x  的最小整數, 如:  ceiling(3.213)  --> 4
  • floor(x):     小於等於 x 的最大整數,如:  floor(3.6534) --> 3
  • trunc(x):    取x的整數部分,          如:  trunc(5.999)  --> 5
  • round(x,digits=n):   將x舍入為指定的小數,                       如: round(3.4567,2)  --> 3.46
  • signif(x,digits=n):  將x舍入為指定的有效數字位數              如:  signif(3.4567,2)  --> 3.5

統計函數


  • mean(x):  平均數,語法: mean(x, trim = 0, na.rm = FALSE, ...)
    1. trim:  (0 to 0.5),  如:mean(x, trim = 0.1), 表示先把x的最大的10%的數和最小的10%的數去掉,然後剩下的數算平均
    2. 示例代碼
       x <- c(2,4,6,8,10,11)
       mean(x,trim = 0.2)   #6*0.2=1.2(取整),除去最大最小值11、2 ,實際計算 4 6 8 10的平均 --> 7
       mean(x)              # 41/6  --> 6.833
  • median(x) : 中位數,語法: median(x, na.rm = FALSE) ,從小到大或是從大到小排列時最中間的那個或是最中間兩個數的平均值,主要用於算一個整體(小組)的一般水平...
    > x <- c(2,4,6,9,10,11)
    >  median(x)
    [1] 7.5
    >  x <- c(2,4,9,10,11)
    >  median(x)
    [1] 9
  • med(x): 絕對中位數,語法:mad(x, center = median(x), constant = 1.4826, na.rm = FALSE,low = FALSE, high = FALSE)
    1. 主要是考慮到數據列中一些與均值相差較遠的離譜數據在求均值和方差時候,尤其是求方差時對結果產生較大的影響
    2. 實際上計算mad的過程就是:constant * cMedian(abs(x - center))
    3. low,high: 當中位數是兩個數字時,根據設置的參數取最小或最大的值
    4. 示例代碼
      > x <- c(1,2,3,5,7,8)
      > mad(x)
      [1] 3.7065
      > #分解mad(x)計算過程
      > y <- abs(x - median(x));y
      [1] 3 2 1 1 3 4
      > z <- median(y);z
      [1] 2.5
      > 1.4826 * z
      [1] 3.7065
  • rang(x): 求值域, 語法:range(..., na.rm = FALSE)
    > x <- c(1,2,3,5,7,8)
    > y <- range(x);y
    [1] 1 8
    > diff(y)   #滯後差分
    [1] 7
  • sd(x): 標準差,語法:sd(x, na.rm = FALSE), 標準差是一組數據平均值分散程度的一種度量。一個較大的標準差,代表大部分數值和其平均值之間差異較大;一個較小的標準差,代表這些數值較接近平均值
    1. 標準差也被稱為標準偏差,或者實驗標準差,公式為 ,  ,
    2. 公式意義:所有數減去其平均值的平方和,所得結果除以該組數之個數減一 (上面的公式有誤),再把所得值開根號,所得之數就是這組數據的標準差
    3. 標準差應用於投資上,可作為量度回報穩定性的指標。標準差數值越大,代表回報遠離過去平均數值,回報較不穩定故風險越高。相反,標準差數值越小,代表回報較為穩定,風險亦較小
    4. 代碼示例:
      > x <- c(1,2,3,4)
      > sd(x)
      [1] 1.290994
      > m <- mean(x);
      > y <- sum((x - m)^2)/(length(x) -1)
      > sqrt(y)
      [1] 1.290994

 

  • scale(x): 為數據對象x按列進行中心化或標準化,語法:scale(x, center = TRUE, scale = TRUE)

    1. 數據的中心化是指數據集中的各項數據減去數據集的均值
    2. 標準化是指中心化之後的數據在除以數據集的標準差
    3. 示例代碼:
      > data <- c(1, 2, 3, 6, 3)
      > scale(data)
                 [,1]
      [1,] -1.0690450
      [2,] -0.5345225
      [3,]  0.0000000
      [4,]  1.6035675
      [5,]  0.0000000
      attr(,"scaled:center")
      [1] 3
      attr(,"scaled:scale")
      [1] 1.870829
  •  quantile(x): 求百分位數,語法:quantile(x, probs = seq(0, 1, 0.25), na.rm = FALSE, names = TRUE,...)
    1. 預設計算方法:要計算的點到起始點的距離/終點到起始點的距離=要計算的比例
    2. 示例代碼:
      > m <- c(1:20)
      > quantile(m,probs = c(0.25,0.75,1));
        25%   75%  100% 
       5.75 15.25 20.00 
      > (20 -1)*0.25 + 1
      [1] 5.75

 應用示例


  • 根據如下表格中的數據,按成績對學生進行ABCDEF分等級,最後按姓氏和名字進行排序輸出
  • 示例數據如下,保存本地 student.rda 文件中
  • 第一步: 同於三門學科分值相差甚遠,首選必須將變數進行標準化,讓數據變得可比較, 每科成績用單位標準差表示,如下
    > setwd("E:\\R")
    > load(file = "roster.rda")
    > options(digits = 2)  #小數點後保留2位
    > z <- scale(roster[,2:4])
    > z
         math science english
    1   0.013   1.078   0.587
    2   1.143   1.591   0.037
    3  -1.026  -0.847  -0.697
    4  -1.649  -0.590  -1.247
    5  -0.068  -1.489  -0.330
    6   0.128  -0.205   1.137
    7  -1.049  -0.847  -1.247
    8   1.432   1.078   1.504
    9   0.832   0.308   0.954
    10  0.243  -0.077  -0.697
  • 第二步:計算每行的平均得分獲得綜合得分,合併到花名冊,如下:

    > score <- apply(z,MARGIN = 1,FUN = mean);
    > score
        1     2     3     4     5     6     7     8     9    10 
     0.56  0.92 -0.86 -1.16 -0.63  0.35 -1.05  1.34  0.70 -0.18 
    > roster <- cbind(roster,score);roster
                student math science english score
    1        John Davis  502      95      25  0.56
    2    Angla Williams  600      99      22  0.92
    3  Bullwinkle Moose  412      80      18 -0.86
    4       David Jones  358      82      15 -1.16
    5  Janice Makhammer  495      75      20 -0.63
    6    Cheryl Cushing  512      85      28  0.35
    7    Reuven Ytzrhak  410      80      15 -1.05
    8         Greg Knox  625      95      30  1.34
    9      Joel England  573      89      27  0.70
    10     Mary Rayburn  522      86      18 -0.18
  • 第三步:按百分位數進行等級劃分,如下:

    > y <- quantile(roster$score,probs = c(0.8,0.6,0.4,0.2))
    > y
      80%   60%   40%   20% 
     0.74  0.44 -0.36 -0.89 
    > roster <- within(roster,{
    +                   grader <- NA
    +                   grader[score >= y[1]] <- "A"
    +                   grader[score < y[1] & score >= y[2]] <- "B"
    +                   grader[score < y[2] & score >= y[3]] <- "C"
    +                   grader[score < y[3] & score >= y[4]] <- "D"
    +                   grader[score < y[4]] <- "E"
    + })
    > roster
                student math science english score grader
    1        John Davis  502      95      25  0.56      B
    2    Angla Williams  600      99      22  0.92      A
    3  Bullwinkle Moose  412      80      18 -0.86      D
    4       David Jones  358      82      15 -1.16      E
    5  Janice Makhammer  495      75      20 -0.63      D
    6    Cheryl Cushing  512      85      28  0.35      C
    7    Reuven Ytzrhak  410      80      15 -1.05      E
    8         Greg Knox  625      95      30  1.34      A
    9      Joel England  573      89      27  0.70      B
    10     Mary Rayburn  522      86      18 -0.18      C
  • 第四步: 將student變數拆分為firstname 和 lastname ,並按姓氏和名稱排序,將結果保存為本地文件 studentGrade.rda

    > name  <- strsplit(roster$student," ")
    Error in strsplit(roster$student, " ") : non-character argument
    > class(roster$student)   #查看student類型,是因數,必須轉化成字元
    [1] "factor"
  • 正確代碼如下:

    >  name  <- strsplit(as.character(roster$student)," ")
    >  firstname <- sapply(name,"[",1)  # "[" 是一個可以提取某個對象一部分的函數,在這裡用來提取列表中name各成份中的第一或二個元素
    >  lastname <- sapply(name,"[",2)
    >  sGrade <- cbind(firstname,lastname,roster[,-1]) 
    >  sGrade[order(sGrade$lastname),]
        firstname  lastname math science english      score grader
    6      Cheryl   Cushing  512      85      28  0.3532485      C
    1        John     Davis  502      95      25  0.5592028      B
    9        Joel   England  573      89      27  0.6978361      B
    4       David     Jones  358      82      15 -1.1620473      E
    8        Greg      Knox  625      95      30  1.3378934      A
    5      Janice Makhammer  495      75      20 -0.6289776      D
    3  Bullwinkle     Moose  412      80      18 -0.8565414      D
    10       Mary   Rayburn  522      86      18 -0.1768163      C
    2       Angla  Williams  600      99      22  0.9238259      A
    7      Reuven   Ytzrhak  410      80      15 -1.0476242      E
    >  save(sGrade,file = "studentGrade.rda")
  •  

控制流


  • for :  示例: for(i in 1:10) print("hello")
  • while:     示例:
     i<-10
     while (i>0)
     {
       print("hello")
       i <- i-1
     }
  • ifelse:  語法: ifelse(cond,statement1,statement2) , 當 cond = true 時執行第一個語句,反之執行第二個
  • swith:  語法: switch(expression, case1, case2, case3....)
    x <- switch(
      3,
      "first",
      "second",
      "third",
      "fourth"
    )
    x

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先確定sdk是最新的 其次接下來是檢查xml文件,文件名不能大寫 如果xml文件太多,可以clean項目,然後觀察 Console 信息 修改Console提示的xml的錯誤後 重新clean 項目 ...
  • 在實際開發中可能需要用到兩個Service相互監視的情況,本示例就是實現此功能以作參考。 服務B: IBridgeInterface.aidl 界面: AndroidManifest.xml 由於涉及到跨進程,onServiceConnected() 方法中使用 而不能直接類型轉換 onStartC ...
  • package com.sinostride.smartcity.util;import java.io.UnsupportedEncodingException;/** * Created by lhd on 2016/10/12. * 基本類型轉換的工具類 */ public class Bas ...
  • JS調用OC 很多應用裡面或多或少的調用了網頁,來達到絢麗的效果,所謂的JS調用OC.....舉個例子吧,網頁上有個按鈕 點擊按鈕跳轉界面,跳轉的動作由OC的代碼實現。 OC調用JS 還是舉個例子,我們OC代碼創建了輸入框比如輸入用戶名,輸入完成後顯示在網頁上,顯示用戶的用戶名 一.利用webVie ...
  • 在知乎的“Android自定義控制項,你們是如何系統學習的?”問題中看到的一個答案,答主為GcsSloop,他的博客上有一系列的自定義View學習博文,今天閱讀並實踐了部分,對自定義View有更完整的認知。推薦沒有系統瞭解的Android開發者閱讀。在這裡不做內容的搬運工了,請到作者博客查看。//其中 ...
  • 本文實現如下幾個界面之間的平移動畫實現 本文地址:http://www.cnblogs.com/wuyudong/p/5954847.html,轉載請註明出處。 分析: 導航界面移動過程中,平移動畫 上一頁移入動畫 (-屏幕寬度,y) >(0,y) 上一頁移出動畫 (0,y) >(屏幕寬度,y) 下 ...
  • 先提一下需求,用一個自定義EditText實現禁止輸入表情。談一下自定義控制項中自定義屬性的定義和使用方式。 第一步當然是自定義類EditTextNoEmoji繼承EditText,同時重寫三個構造方法。這裡需要註意的是,三個構造方法中必須分別實現父類對應的構造方法,就是三個super();而不能出現 ...
  • 最近遇到一個問題,用戶數據丟失,拿到用戶資料庫文件以後,發現資料庫損壞。database disk image is malformed因此希望可以找到一種方法,可以檢測出來資料庫是否損壞,經過google,找到了一種方法,先記錄下來。+ (BOOL)checkIntegrity { NSStrin... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...