R|入門-學習筆記(一)

tags: R 入門 iMooc 數據類型 函數


這是在 imooc 慕課網上聽課做的一點內容。目前看來十分沒有邏輯。感覺上和matlab挺像,但是一些數據類型還是沒有什么概念。

1. 數據類型

查看數據x類型:class(x)
字符(character), 它們常常被引號包圍
邏輯類型(logic),TRUE,FALSE和NA,全部大寫
復數(complex),1+2i
數值型(numeric),可以是整數或者小鼠
整數(integer),在數字后面加上大寫的L
列表(list) S 對象的向量
因子(factor) 常用于標記樣本

1.1邏輯向量

>, <, >=, <=,
不等:!=
相等:==
交集(and):&
并集(or):|

1.2 字符型

字符向量也可以用c()拼接

1.3 產生序列

  • rep(a, times = value),重排。
  • seq(from = value, to = value, by = value, length = value). 例如,seq(1,10,2),從1開始,步長為2,到10,結果是[1,3,5,7,9]

2. 數據結構

2.1 向量

2.1.1 產生向量

函數vector有兩個參數:類型(mode)和長度(length),創建的向量中元素值取決于參數所指定的數據類型:數值型向量則元素值都為0,邏輯型都為FALSE,字符型都為""。以下三個函數有幾乎相同的效果(創建一個向量)并且只有一個參數即長度:numeric(),logical(),和character()。

  • vector(mode = 'character', length = 5) 產生一個字符類型的空向量。
  • x1 <- 1:4 產生int向量,[1 2 3 4 ]
  • x2 <- c(1,2,3,4) 產生num向量 [1 2 3 4]
  • x2 <- c(TRUE,1,'3','a') 產生char向量 ['TRUE','1','3','a']
  • as.character(x) 強制轉換類型
  • names(x) <- c('name1','name2','name3') 添加數據標簽

2.2 矩陣

  • 向量+維度
  • 先row,再col
  • attribute(x) 查看屬性

2.2.1 產生矩陣

用matrix來創建:matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)

選項byrow表示數據給出的值是要按列填充(缺省值)還是按行填充
(如果為TRUE)。可以通過選項dimnames給行列命名。

e = c(1:6)
f = matrix(e,2,3,byrow=TRUE)
f
    [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6

另一種創建矩陣的方法是給維數適當的賦值,這種方法也能改變已有矩陣的維度

> dim(e)
NULL
> dim(e) <- c(2,3)
> e
    [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
> dim(e) <- c(3,2)
> e
    [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6

2.2.2 矩陣拼接

  • rbind(x,x1) row拼接(縱向)
  • cbind(x,x1) col拼接(橫向)

2.2.3 矩陣維度的命名

> dimnames(e) <- list(c('1','2','3'), c('a','b'))
> e
  a b
1 1 4
2 2 5
3 3 6

2.3 數組

維度可以到達多維(三維及以上)的矩陣,R中的矩陣只能有2維
創建方法是 x <- array(1:24, dim = c(2,3,4))

2.4 列表(list)

可以包含不同類型的對象,通過雙重方括號或者名詞來訪問

l <- list('a', 2.4, TRUE, 4L, -2)
l <- list(x1 = 'a', x2 = 2.4, x3 = TRUE, x4 = 4L, x5 = -2) # 可以命名,通過l[[2]]或l[['x2']]訪問
l <- list(c(1,2,3),c(2,4,5))

2.5 因子

  • 處理分類變量。包括順序變量和命名變量。通過在factor函數中添加參數 order = TRUE來構造順序變量。
  • 整數變量+標簽(優于整數變量)。常用于線性模型

一個因子不僅包括分類變量本身,還包括變量不同的可能水平(即使它們在數據中不出現)。因子函數factor用下面的選項創建一個因子:

x <- factor(c('male','male','male','female','female'))
x
[1] male   male   male   female female
Levels: female male

y <- factor(c('male','male','male','female','female'), levels = c('male','female') )
y
[1] male   male   male   female female
Levels: male female # 和x相比,順序不同。依次編號

factor(x, levels = sort(unique(x), na.last = TRUE), labels = levels, exclude = NA, ordered = is.ordered(x))`

levels 用來指定因子可能的水平(缺省值是向量x中互異的值);labels用來指定水平的名字;exclude表示從向量x中剔除的水平值;ordered是一個邏輯型選項用來指定因子的水平是否有次序。回想數值型或字符型

對因子進行整體性了解,可以使用table(x)查看因子不同水平的數量。還可以去掉因子的屬性levels,使用unclass(x),會變成一個integer的向量。

2.6 缺失值

  • NA/NaN, NaN 屬于NA,NA不屬于NaN
  • NaN一般用于數字缺失值,但是NA更廣。同時NA有類型屬性,如字符型整數型
  • is.na()is.nan() 判斷是否是缺失值

2.7 數據框 data frame

儲存表格數據。
可以視為各個元素長度相同的列表

  • 每個元素代表1列數據(豎著的1列)
  • 每個元素的長度代表行數
  • 元素類型可以不同

2.7.1 輸入數據框

t <- data.frame(第一列,第二列,...,row.names = ,)

> t <- data.frame(id = c(1,2,3,4),grade = c(70,77,89,90))
> t
   id  grade
1  1    70
2  2    77
3  3    89
4  4    90
  • nrow和ncol可以分辨查看行和列數
  • 和矩陣的差別在于,每一列類型可以不同
  • 可以用data.matrix()轉化為矩陣

2.8 日期和時間(未完待續)

date(),
用as.date()可以把2016-07-20儲存為date格式。用weekdays()、montths()、quarters()能分別告訴我們哪一天哪一月哪一季度,julian()

如何選出數據集中的某一個?

如果知道名稱name,可以用$name來選出
例如

> x<- data.frame(v1 = 1:3,v2 = c('a','b','c'))
> x
  v1 v2
1  1  a
2  2  b
3  3  c
> x$v1
[1] 1 2 3
> x$v1>2
[1] FALSE FALSE  TRUE
> x[x$v1>1,]
  v1 v2
2  2  b
3  3  c
> x[which(x$v1>1),]
  v1 v2
2  2  b
3  3  c

3. apply函數

apply系列函數的基本作用是對數組(array,可以是多維)或者列表(list)按照元素或元素構成的子集合進行迭代,并將當前元素或子集合作為參數調用某個指定函數。vector是一維的array,dataframe可以看作特殊的list。

這些函數間的關系

作用目標 在每個元素上應用 在子集合上應用
array apply tapply
list lapply(...) by

其中lapply(...)包括一系列函數

lapply
   |
   | -> 簡化版: sapply
   |             | -> 可設置返回值模板: vapply
   |             | -> 多變量版: mapply
   |
   | -> 遞歸版: rapply

另外vector比較奇怪,vector是一維的array,但是卻不全是和array使用相同的函數。在按元素迭代的情況下,使用和list一樣的lapply函數;而在按子集合迭代的情況下,tapply和by都能用,只是返回值形式不同。

apply沿著某一維度進行處理

apply(array, margin, FUN, ...)
在array上,沿margin方向,依次調用FUN。返回值為vector。margin表示數組引用的第幾維下標(即array[index1, index2, ...]中的第幾個index),1對應為1表示行,2表示列,c(1,2)表示行列。例如 apply(x,2,sum)對列求和。

lapply 循環處理列表中的每一個元素

lapply(列表,函數/函數名,其他參數)
sapply 和lapply一樣,只是化簡了結果,能用向量就用向量,能用矩陣就用矩陣。

mapply lapply的多元版本

mapply(函數,數據,參數)以下兩句效果是一樣的

list(rep(1,4),rep(2,3),rep(4,2),rep(4,1))
mapply(rep,1:4,4:1)

tapply對向量子集進行操作

tapply(向量,因子/因子列表,函數)
tapply(array, indices, margin, FUN=NULL, ...)

按indices中的值分組,把相同值對應下標的array中的元素形成一個集合,應用到FUN。類似于group by indices的操作。如果FUN返回的是一個值,tapply返回vector;若FUN返回多個值,tapply返回list。vector或list的長度和indices中不同值的個數相等。

當FUN為NULL的時候,返回一個長度和array中元素個數相等的vector,指示分組的結果,vector中相等的元素所對應的下標屬于同一組。例如,返回c(1, 2, 1, 3, 2), 表示根據傳入的indices,第1、3個元素作為一組,第2、5個元素作為一組,第4個元素作為一組。

例如

x <- c(1:4,2:5,3:6)
f <- gl(3, 4) #產生因子水平(分組),三個因子每因子5個
tapply(x,f,mean)

3.2排序

sort
order 給出排序后的下標,多個標準

x <- data.frame(v1 = 1:5, v2= 2:6, v3 = 3:7)
x[order(x$v1, x$v2),]

3.3總結數據信息

head
tail
summary
str
table

sum
any
all

xtabs 交叉表

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,238評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,823評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,604評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,339評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,713評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評論 3 445
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,893評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,448評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,201評論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,397評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,631評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,033評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,321評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,128評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,347評論 2 377

推薦閱讀更多精彩內容