R语言学习笔记(三)操纵数据

本文深入探讨了R语言中数据操作的基本方法,包括数组、列表、数据框的元素提取、条件筛选、子集构建等核心技能,适用于数据分析、数据科学等领域。

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

操纵数据

原始数据—预处理后的数据

基本方法:

[]提取一个或多个类型相同的元素

[[]]从列表或数据框中提取元素

$按名字从列表或数据框中提取元素

> m<-1:10  #R语言数组下标从1开始
> m[1]
[1] 1
> m[5]
[1] 5
> m[1:5]
[1] 1 2 3 4 5
> m[6:10]
[1]  6  7  8  9 10
> m[m>5]
[1]  6  7  8  9 10
> m>5  #判断
 [1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
> m[m>5&m<7]
[1] 6
> m[m<3 |m>7]
[1]  1  2  8  9 10
>names(y)<- c("a","b","c","d")
> y
a b c d 
1 2 3 4 
> y[2]
b 
2 
> y["b"]
b 
2 

> n <- matrix(1:6,nrow=3,ncol=2)
> n
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> n[1,2] #[行,列]
[1] 4
> n[1,]
[1] 1 4
> n[,1]
[1] 1 2 3
> n[c(1,2),1]  #取到第一,二行,第一列的元素
[1] 1 2
> class(n[1,2])
[1] "integer" #返回向量
> n[1,2,drop=FALSE]     #关掉返回向量,返回矩阵
     [,1]
[1,]    4
#数据框子集
df <-data.frame(id=c(1,2,3,4),name=c("a","b","c","d"))
> df
  id name
1  1    a
2  2    b
3  3    c
4  4    d
> df$id           
[1] 1 2 3 4
> df$id[c(2,4)] <- NA            #缺失值
> df
  id name
1  1    a
2 NA    b
3  3    c
4 NA    d
> df <-data.frame(id=c(1,2,3,4),id2=c(5,6,7,8),name=c("a","b","c","d"))
> df
  id id2 name
1  1   5    a
2  2   6    b
3  3   7    c
4  4   8    d
> df[(df$id>2 & df$id2>6),]
  id id2 name
3  3   7    c
4  4   8    d
> subset(df,df$id>3)       
  id id2 name
4  4   8    d

构建子集

列表子集

[[]]/$/[[]][]/[[]][[]]

嵌套列表/不完全匹配

> mm <- list(id=1:4,height=170,gender="male")
> mm
$id
[1] 1 2 3 4

$height
[1] 170

$gender
[1] "male"

> mm['id']
$id
[1] 1 2 3 4

> mm[1]
$id
[1] 1 2 3 4
> mm[[1]]  #只拿到内容
[1] 1 2 3 4
> mm[[1]]
[1] 1 2 3 4
> mm[['id']]
[1] 1 2 3 4
> mm$id
[1] 1 2 3 4
> mm[c(1,3)]
$id
[1] 1 2 3 4

$gender
[1] "male"
> y<-"id"
> mm[[y]]
[1] 1 2 3 4
> mm$id
[1] 1 2 3 4
> mm$y
NULL
#如何从列表中获取嵌套的元素
> nn<-list(a=list(1,2,3,4),b=c("monday","tuesday"))
> nn  #a本身也是列表
$a  
$a[[1]]
[1] 1

$a[[2]]
[1] 2

$a[[3]]
[1] 3

$a[[4]]
[1] 4


$b
[1] "monday"  "tuesday"
> nn[[1]][[2]]   
[1] 2
> nn[[1]][2]  子列表中的第二个元素
[[1]]
[1] 2
#获取嵌套列表中的元素
> nn[[c(1,3)]]  #列表中第一个元素中的第三个元素
[1] 3
> nn[[c(2,2)]]  #列表中第二个元素中的第二个元素
[1] "tuesday"
#不完全匹配
> l<-list(adfasdfasd=1:10)
> l$a
 [1]  1  2  3  4  5  6  7  8  9 10
> l[["a"]]
NULL
> l[["a",exact=FALSE]]
 [1]  1  2  3  4  5  6  7  8  9 10

处理缺失值

ff<-c(1,NA,2,NA)
> ff[!is.na(ff)] #获取不是缺失值的元素
[1] 1 2
ff1<-c(1,NA,2,NA,3)
ff2<-c("a","b",NA,NA,"c")
z<-complete.cases(ff1,ff2)
> ff1
[1]  1 NA  2 NA  3
> 
> ff2
[1] "a" "b" NA  NA  "c"
> z
[1]  TRUE FALSE FALSE FALSE  TRUE
library(datasets) #数据集
head(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)) 去缺失值
> 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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值