1. 程式人生 > >R實戰 第三篇:數據處理(基礎)

R實戰 第三篇:數據處理(基礎)

計算 edi 字符數 定義函數 空間 數值 sqrt 字符類 ceil

數據結構用於存儲數據,不同的數據結構對應不同的操作方法,對應不同的分析目的,應選擇合適的數據結構。在處理數據時,為了便於檢查數據對象,可以通過函數attributes(x)來查看數據對象的屬性,str(x)函數用於查看R對象的內部結構,通過print(x)函數,顯示數據對象存儲的內容,該函數把數據打印到控制臺上,另外,RStudio提供了一個可視化查看數據的函數View(x)。

一,處理數據的函數

標量通常是常量,每一個標量都有特定的數據類型,常用的數據類型是數值類型,字符類型,邏輯類型和日期類型。

對於邏輯類型,可能的值是TRUE和FALSE,用於邏輯操作的運算符:與(&)、或(|)、非(!)

R語言中經常會遇到一些特殊值:

  • 缺失值 NA(Not Avaiable),是不可用的縮寫,通過函數is.na(x)來測試變量的值是否為NA;
  • NaN為“不是一個數”,意味著計算沒有數學意義;
  • NULL值,空值,表示一個空的變量,不會占用任何空間,通過函數is.null(x)來測試變量的值是否為NULL;
  • 特殊的數字:Inf、-Inf 表示正無窮,負無窮;

1,日期類型

日期類型比較特殊,日期值通常以字符串的形式輸入到R中,然後使用as.Date()函數轉換為以數值形式存儲的日期變量,as.Date()函數的語法是:

as.Date(x, input_format)

參數input_format是日期值的輸入格式,默認的輸入格式是"yyyy-mm-dd":

mydate <- as.Date("2017-01-13")

輸入參數可以自定義日期的輸入格式:

  • %d:數字表示的天(0-31)
  • %a:縮寫的星期名(Mon、Tue、Wed、Thur、Fri、Sat、Sun)
  • %m:月份(00、01、02等)
  • %b:縮寫的月份(Jan、Feb、Mar等)
  • %B:英語月份(January、February 、March等)
  • %y:兩位數的年份
  • %Y:四位數的年份

舉個例子,把默認的日期格式轉換為特定類型的日期格式:

as.Date("2018-03-05","%Y-%m-%d")

把日期類型轉換為字符串類型,可以使用format()函數,指定日期的輸出格式:

format(mydate,format="output_format")

例如,把當前日期按照特定的格式輸出:

today<-Sys.Date()
format(today,format("%B %d %Y"))

也可以直接把日期類型轉換為字符串類型:

strdate <- as.character(mydate)

2,字符類型

常用的字符類型的操作:

  • 查看字符數量: nchar(x)
  • 提取或替換字符的子串: substr(x, start,stop)
  • 匹配模式,返回下標:grep(pattern, x, ignore.case=FALSE, fixed=FALSE),從x中搜索匹配模式的字符的下標
  • 匹配模式,並替換:sub(pattern, replacement, x, ignore.case=FALSE, fixed=FALSE),從x中搜索匹配模式的字符,並以文本replacement替換
  • 分割字符: strsplit(x,split,fixed=FALSE)
  • 連接字符: paste(...,sep=" "),把多個字符連接成一個長的字符串,分隔符由參數sep指定
  • 字符的大小寫轉換: toupper(x),tolower(x)

3,數值類型

對於數值類型,常用的數學函數是:

  • 絕對值:abs(x)
  • 平方根:sqrt(x)
  • 不小於x的最小整數:ceiling(x)
  • 不大於x的最大整數:floor(x)
  • 把x舍入為指定位的小數:round(x,digits=n)
  • 把x攝入有效位數的小數:signif(x,digits=n)
  • 截取整數部分,舍棄小數部分:trunc(x)

常用的統計函數:

  • 平均值:mean(x)
  • 中位數:median(x)
  • 絕對中位數:mad(x)
  • 分位數:quantile(x,probs)
  • 標準差:sd(x)
  • 方差:var(x)
  • 值域:range(x)
  • 求和:sum(x)
  • 最值:min(x),max(x)
  • 標準化:scale(x, center=TRUE, scale=TRUE)

分割區間的函數:

  • 把連續型變量分割位有著n個水平的因子:cut(x, n, ordered_result)
  • 創建美觀的分割點,通過選取n+1個等間距的取整值,把一個連續型變量分割位n個區間:pretty(x, n)

二,類型判斷和轉換

判斷 轉換
is.numeric(x) as.numeric(x)
is.character(x) as.character(x)
is.vector(x) as.vector(x)
is.matrix(x) as.matrix(x)
is.data.frame(x) as.data.frame(x)
is.factor(x) as.factor(x)
is.logical(x) as.logical(x)

三,隨機抽樣

從海量的數據抽取一定數量的樣本數據,以創建分析模型,抽樣的函數是:

sample(x, size, replace = FALSE, prob = NULL)

參數註釋:

  • x:樣本空間
  • size:抽取的樣本數量
  • replace:如果為TRUE,表示放回抽樣;如果為FALSE,表示無放回抽樣;

舉個例子,采用放回抽樣,把樣本重復12次,得到一個矩陣,並轉換為數據框類型:

> d <-data.frame(matrix(sample(c(NA, 1:4), 12, replace = TRUE), 4))
> d
  X1 X2 X3
NA  4  1
 1  2 NA
 1  4  2
NA NA  4

四,偽隨機數

函數runif()用於生成服從正態分布的偽隨機數,n是生成隨機數的個數,min和max是隨機數的最值。

runif(n, min = 0, max = 1)

在每次生成隨機數時,函數都會使用一個不同的種子,因此會產生不同的結果,通過函數set.seed(n)顯式指定種子,讓結果可以重現。

舉個例子,設置隨機數種子,使用runif()函數生成0-1區間上服從均勻分布的偽隨機數:

set.seed(n)
runif(5)

設置R會話的小數點數量,生成整數偽隨機數:

> options(digits=0)
> set.seed(1)
> runif(10,min=1,max=100)
 [1] 27 38 58 91 21 90 95 66 63  7

五,控制流

常用的控制流是循環和條件執行

1,for循環結構

for循環重復執行一個語句,直到叠代變量的值不再包含序列seq中為止:

for( var in seq) 
{statement}

舉個例子,叠代一個序列,打印出叠代器的計算值:

for( i in 1:10)
{
print(i^i)
}

2,條件執行

if (condition) statement
if (condition) statement1 else statement2

第二個條件執行語句可以簡寫為ifelse結構:

ifelse(condition,statement1,statement2)

六,創建自定義函數

參考我的博客《R語言學習 第四篇:函數,分支和循環》

R實戰 第三篇:數據處理(基礎)