R 语言学习笔记二 : 操纵数据-构建子集

本文详细介绍了R语言的基本方法,包括向量操作、矩阵子集、数据框子集、列表操作及符号匹配。通过实例展示了如何进行数据筛选、矩阵和数据框的子集提取,以及列表的元素访问。此外,还讨论了数据包的使用、数据完整性处理和向量化操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#基本方法
> x<-1:10
> x
[1]  1  2  3  4  5  6  7  8  9 10
> x[1]
[1] 1
> x[5]
[1] 5
> x[1:5]
[1] 1 2 3 4 5
> x[6:10]
[1]  6  7  8  9 10
> x[x>5]
[1]  6  7  8  9 10
> x>5
[1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE
[8]  TRUE  TRUE  TRUE
> x[x>5&x<7]
[1] 6
> x[x<3 |x>7]
[1]  1  2  8  9 10
> y<-1:4
> y
[1] 1 2 3 4
> names(y)<-c("a","b","c","d")
> y
a b c d 
1 2 3 4 
> y[2]
b 
2 
> y["b"]
b 
2 
> 
#矩阵子集
> x<-matrix(1:6,nrow = 2,ncol = 3)
> x
[,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> x[1,2]
[1] 3
> x[2,3]
[1] 6
> x[1]
[1] 1
> x[1,]
[1] 1 3 5
> x[,1]
[1] 1 2
> x[2,c(1,3)]
[1] 2 6
> class(x[1,2])
[1] "integer"
> #要使其返回矩阵则
  > x[1,2,drop=FALSE]
[,1]
[1,]    3
> 
#数据框的子集
> x<-data.frame(v1=1:5,v2=6:10,v3=11:15)
> x
v1 v2 v3
1  1  6 11
2  2  7 12
3  3  8 13
4  4  9 14
5  5 10 15
> x$v3[c(2,4)]<-NA
> x
v1 v2 v3
1  1  6 11
2  2  7 NA
3  3  8 13
4  4  9 NA
5  5 10 15
> x[,2]
[1]  6  7  8  9 10
> x[,v2]
Error in `[.data.frame`(x, , v2) : object 'v2' not found
> x[,"v2"]
[1]  6  7  8  9 10
> x[(x$v1<4 & x$v2<8),]
v1 v2 v3
1  1  6 11
2  2  7 NA
> x[x$v1>2,]
v1 v2 v3
3  3  8 13
4  4  9 NA
5  5 10 15
> x[which(x$v1>2),]
v1 v2 v3
3  3  8 13
4  4  9 NA
5  5 10 15
> ?which
> which(x$v1>2)
[1] 3 4 5
> x$v1>2
[1] FALSE FALSE  TRUE  TRUE  TRUE
> subset(x,x$v1>2)
v1 v2 v3
3  3  8 13
4  4  9 NA
5  5 10 15
> 
#列表的自己
#符号-[[]]/$/[[]][]/[[]][[]]
> x<-list(id=1:4,height=170,gender="male")
> x
$id
[1] 1 2 3 4

$height
[1] 170

$gender
[1] "male"

> x[1]
$id
[1] 1 2 3 4

> x["id"]
$id
[1] 1 2 3 4

> x[[1]]
[1] 1 2 3 4
> x[["id"]]
[1] 1 2 3 4
> x$id
[1] 1 2 3 4
> x[c(1,3)]
$id
[1] 1 2 3 4

$gender
[1] "male"

> y<-"id"
> x[["id"]]
[1] 1 2 3 4
> x[[y]]
[1] 1 2 3 4
> x$id
[1] 1 2 3 4
> x$y
NULL
> x<-list(a=list(1,2,3,4),b=c("Monday","Tuesday"))
> x
$a
$a[[1]]
[1] 1

$a[[2]]
[1] 2

$a[[3]]
[1] 3

$a[[4]]
[1] 4


$b
[1] "Monday"  "Tuesday"

> x[[1]]
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

[[4]]
[1] 4

> x[[1]][[2]]
[1] 2
> x[[1]][1]
[[1]]
[1] 1

> x[[1]][2]
[[1]]
[1] 2

> x[[c(1,3)]]
[1] 3
> x[[c(2,3)]]
Error in x[[c(2, 3)]] : subscript out of bounds
> x[[c(2,2)]]
[1] "Tuesday"
> 
  #不完全匹配,partial matching
  > x<-list(asdfgh=1:10)
> x
$asdfgh
[1]  1  2  3  4  5  6  7  8  9 10

> x$asdfgh
[1]  1  2  3  4  5  6  7  8  9 10
> x$asdfgh
[1]  1  2  3  4  5  6  7  8  9 10
> x$a
[1]  1  2  3  4  5  6  7  8  9 10
> x[["a"]]
NULL
#关上精确匹配
> x[["a",exact=FALSE]]
[1]  1  2  3  4  5  6  7  8  9 10
> 
  > x<-list(asdfgh=1:10,b=1:2,aaaa=3:5)
> x
$asdfgh
[1]  1  2  3  4  5  6  7  8  9 10

$b
[1] 1 2

$aaaa
[1] 3 4 5

> x$a
NULL
> x$as
[1]  1  2  3  4  5  6  7  8  9 10
> 
#缺失值处理
>
> is.na(x)
[1] FALSE  TRUE FALSE  TRUE FALSE
> x[!is.na(x)]
[1] 1 2 3 
#x,y都不是缺失值的选出来
> y<-c("a","b",NA,"c",NA)
> z<-complete.cases(x,y)
> z
[1]  TRUE FALSE FALSE FALSE FALSE
> x[z]
[1] 1
> y[z]
[1] "a"
> 

#使用R的数据包来看看complete.cases怎样
  > library(datasets)
#展示前六行空气质量,数据airquality纽约的空气质量
> head(airquality)
Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6
> 
#选取都没有缺失值的行
  > g<-complete.cases(airquality)
> g
[1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE
[9]  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
[17]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
[25] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE
[33] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE
[41]  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE
[49]  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE
[57] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE
[65] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
[73]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
[81]  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE
[89]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
[97] FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE
[105]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
[113]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE
[121]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
[129]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
[137]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
[145]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
[153]  TRUE
> airquality[g,][1:10,]
Ozone Solar.R Wind Temp Month Day
1     41     190  7.4   67     5   1
2     36     118  8.0   72     5   2
3     12     149 12.6   74     5   3
4     18     313 11.5   62     5   4
7     23     299  8.6   65     5   7
8     19      99 13.8   59     5   8
9      8      19 20.1   61     5   9
12    16     256  9.7   69     5  12
13    11     290  9.2   66     5  13
14    14     274 10.9   68     5  14
>   

  #向量化操作
  > x<-1:5
> y<-6:10
> y
[1]  6  7  8  9 10
> x
[1] 1 2 3 4 5
> x+y
[1]  7  9 11 13 15
> x*y
[1]  6 14 24 36 50
> x/y
[1] 0.1666667 0.2857143 0.3750000 0.4444444 0.5000000

> x<-matrix(1:4,nrow = 2,ncol = 2)
#rep(2,4)表示打第一个参数,重复4次
> y<-matrix(rep(2,4),nrow=2,ncol=2)
> x*y
     [,1] [,2]
[1,]    2    6
[2,]    4    8
> x/y
     [,1] [,2]
[1,]  0.5  1.5
[2,]  1.0  2.0
> 
  #求矩阵乘法
  > x %*% y
     [,1] [,2]
[1,]    8    8
[2,]   12   12
> 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值