R数据结构及子集提取

R的数据结构和数据类型

向量(vector)

一维结构。向量中的所有元素必须是相同数据类型。

  • 数值型向量 Numeric/ Integer/ Double
  • 字符型向量 Charactor
  • 逻辑型向量 Logical
(3 > 5) & (4 == 4)  #与
FALSE
(TRUE == TRUE) | (TRUE == FALSE)  #或
TRUE
((111 >= 111) | !(TRUE)) & ((4 + 1) == 5)   #!A是对A的否定
TRUE
  • 因子 Factor
a <- c(1, 2, 5, 3, 6, -2, 4)     # 数值型向量 
b <- c("one", "two", "three")    # 字符型向量 
c <- c(TRUE, NA, FALSE)          # 逻辑型向量 
province <- c("四川", "湖南", "江苏", "四川", "四川", "四川", "湖南", "江苏", "湖南", "江苏")   pf <- factor(province)          #创建 province 的因子 pf 
pf
[1] 四川 湖南 江苏 四川 四川 四川 湖南 江苏 湖南 江苏
Levels: 湖南 江苏 四川
矩阵(matrix)

二维结构。矩阵中所有元素也必须是统一数据类型,如不一样,R会强制转换数据类型。

my_matrix <- matrix(1:20, nrow = 4, ncol = 5)
my_matrix
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20

(mat1<-matrix(1:12,6, byrow=T))    #可以加括号,直接看到赋值结果。byrow=T代表按行排列,=FALSE表示按列排列
mat1
mat2<-matrix(1:12,3,4, byrow=F)
mat2
数组(array)

数组可以是二维的也可以是多维的。

a <- array(data=1:18,dim=c(3,3,2))
a
, , 1

     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

, , 2

     [,1] [,2] [,3]
[1,]   10   13   16
[2,]   11   14   17
[3,]   12   15   18
数据框(data frame)

二维结构。数据框中同一列元素类型一致,不同列可以不同;每一列有名称,列的名称不能以数字开头;列名称一定不能重复;行名和列名不能重复。

patientID <- c(1, 2, 3, 4) 
age <- c(25, 34, 28, 52) 
diabetes <- c("Type1", "Type2", "Type1", "Type1") 
status <- c("Poor", "Improved", "Excellent", "Poor") 
patientdata <- data.frame(patientID, age, diabetes, status) 
patientdata
  patientID age diabetes    status
1         1  25    Type1      Poor
2         2  34    Type2  Improved
3         3  28    Type1 Excellent
4         4  52    Type1      Poor

列表(list)

list好比是一个仓库,不限制数据类型,可以是vector,matrix,array,dataframe,甚至是list
list是一维的!!!

g <- "My First List" 
h <- c(25, 26, 18, 39) 
j <- matrix(1:10, nrow = 5) 
k <- c("one", "two", "three") 
mylist <- list(title = g, ages = h, j, k,patientdata) 
mylist
$title
[1] "My First List"

$ages
[1] 25 26 18 39

[[3]]
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

[[4]]
[1] "one"   "two"   "three"

[[5]]
  patientID age diabetes    status
1         1  25    Type1      Poor
2         2  34    Type2  Improved
3         3  28    Type1 Excellent
4         4  52    Type1      Poor

向量提取和产生

a <- c(1, 2, 5, 3, 6, -2, 4)
a[3]
a[c(1, 3, 5)]    #提取第1,3,5位的元素
a[2:6]           #提取2,3,4,5,6位的元素
a[a>3&a<5]       #如果去掉中括号就变成了逻辑判断语句啦
a[-1]            #提取a中除了第1位以外的元素
a[-1:-3]         #提取a中除了第1,2,3位以外的元素
a[-c(1, 3, 5)]   #负号可以提出来,表示提取a中除了第1,3,5位以外的元素
  • rnorm()
    rnorm(n, mean = 0, sd = 1):r==random。类似的还有dnorm, pnorm, qnorm。d= density = 密度, p= probability = 概率 , q=quantile = 分位。
y <- rnorm(1000)    #产生1000个服从正态分布的随机数
  • rep()
    rep(x, times = 1, length.out = NA, each = 1)
    each:x中每个元素被重复each次
    times: 重复x这个向量的次数
    length.out:输出向量的期望长度
rep(2:5, 2)     
[1] 2 3 4 5 2 3 4 5
rep(2:5, 1:4)   
[1] 2 3 3 4 4 4 5 5 5 5
rep(1:3, times = 4, each = 2) 
[1] 1 1 2 2 3 3 1 1 2 2 3 3 1 1 2 2 3 3 1 1 2 2 3 3
rep(2:5, 2, length.out = 10)
[1] 2 3 4 5 2 3 4 5 2 3
  • seq()
    seq(from = , to = , by = , length.out = , ...)
    from :向量起点
    to: 向量终点
    by: 步长
    length.out: 期望输出的向量长度
seq(1, 10, by = 0.5)
[1]  1.0  1.5  2.0  2.5  3.0  3.5  4.0  4.5  5.0  5.5  6.0  6.5  7.0  7.5  8.0  8.5  9.0  9.5 10.0

矩阵提取

x <- matrix(1:6, 2, 3) 
x[2,2]
x[2,]
x[,2]
x[1:2,2:3]
y <- c(3, 4, 5, 6)
pmax(x, y)           #pmin,pmax用来求相同位置的最大数和最小数
     [,1] [,2] [,3]
[1,]    3    5    5
[2,]    4    6    6
Warning message:
In pmax(x, y) : an argument will be fractionally recycled

数组提取

a <- array(data=1:18,dim=c(3,3,2))
a[2, 3, 2]
[1] 17

数据框提取

数据框可用“$”提取特定列

patientdata[,"age"]
[1] 25 34 28 52
patientdata$age
[1] 25 34 28 52

列表提取

[]代表提取list中的特定元素,其数据结构还是list;[[]]代表提取list中特定元素的内容,其数据结构跟提取元素一致。

> mylist[3]    
[[1]]
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

> mylist[[3]]
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10
> class(mylist[3])
[1] "list"
> class(mylist[[3]])
[1] "matrix"
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容

  • 我们会根据业务的要求做各种复杂的报表,包括了分组、排序、过滤、转置、差分、填充、移动、合并、分裂、分布、去重、找重...
    fhhhfssfhh阅读 1,465评论 0 6
  • 陈羽凡在微博回应白百何出轨事件,没有添油加醋说什么,亦没有情绪激动吵什么,在我看来,他却是以平静无声息的力量站在了...
    静和queen阅读 725评论 19 9
  • 原创: OSHO 奥修每日分享 [一个团体成员说他做了一些很清晰的噩梦,这些噩梦影响到了自己。] OSHO 奥修:
    丽洁_ee54阅读 466评论 0 0
  • 贝叶斯定理,通过已知的概率计算未知的概率,比如,已知A的概率是P(A),B的概率是P(B),A发生时B发生的概率是...
    老祝读书阅读 971评论 0 1