R语言-0基础学习2-构建子集

title: R语言的基础学习
date: 2018-11-22 22:45:19
tags:
- R语言

又来翻之前的笔记啦,这里是一些R语言的基础知识,将会分为几篇,接下来再慢慢更新吧
发现之前的笔记还是简单了一些,这里也做了一些补充~ 通俗易懂,赶紧学起来吧~

如果感觉对你有帮助,可以关注:专栏-生物信息学-小白成长记

R语言学习系列
R语言-0基础学习1-数据结构
R语言-0基础学习2-构建子集
R语言-0基础学习3-循环排序信息处理函数
R语言-0基础学习4-实战1-常见操作

构建子集

获取预处理数据

  1. 原始数据,经过预处理后的数据
  2. []:提取一个或多个类型相同的元素
    [[]]:从列表或数据框中提取元素
    $:按名字从列表或数据框中提取元素
# 构建子集

x <- 1:10
x[1]
# [1] 1

# 获取大于5的数据
x[6:10]
# [1]  6  7  8  9 10
x>5
# [1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
x[x>5]
# [1]  6  7  8  9 10

# 获取大于5且小于7的数据
x[x>5 & x<7]
# [1] 6

# 获取大于5,与小于3的数据
x[x>5 | x<3]
# [1]  1  2  6  7  8  9 10

y <- 1:4
names(y) <- c("a","b","c","d")
y
# a b c d 
# 1 2 3 4 

y[1]
# a 
# 1 

y["a"]
# a 
# 1 

构建矩阵子集

# 构建矩阵子集

x <- matrix(1:6, nrow = 3, ncol = 2)
x
#      [,1] [,2]
# [1,]    1    4
# [2,]    2    5
# [3,]    3    6

x[1,2]
# [1] 4
x[1,]
# [1] 1 4

# 获取第1、3行的第2列
x[c(1,3), 2]
# [1] 4 6

class(x[1,2])
# [1] "integer"

# 只显示行
x[1,2]
# [1] 4

# 将行和列都显示出来
x[1,2, drop=FALSE]
#      [,1]
# [1,]    4

构建数据框的子集

# 构建数据框的子集
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$v1
# [1] 1 2 3 4 5

x$v1[c(1,3)]
# [1] 1 3

x[,2]
# [1]  6  7  8  9 10
# 行没有填,填写了列:2,所以显示第二列所有内容

x[,"v2"]
# [1]  6  7  8  9 10
# 行没有填,填写了列:v2,也能表示第二列,所以显示第二列所有内容

x[1,"v2"]
# [1]  6 
# 行填写了1,表示锁定第一行,填写了列:v2,也能表示第二列,所以显示第二列所有内容

x[(x$v1<4 & x$v2>7),]
#   v1 v2 v3
# 3  3  8 13
# 这个高级一点,锁定第一列小于4的数据,还有第二列大于7的数据,只有一行数据符合条件

x$v1<4
# [1]  TRUE  TRUE  TRUE FALSE FALSE

which(x$v1<4)
# [1] 1 2 3

x[x$v1<4,]
#   v1 v2 v3
# 1  1  6 11
# 2  2  7 12
# 3  3  8 13

x[which(x$v1<4),]
#   v1 v2 v3
# 1  1  6 11
# 2  2  7 12
# 3  3  8 13

# 方法2
# 比较推荐这种方式,比较优雅一些 
subset(x, x$v1<4)
#   v1 v2 v3
# 1  1  6 11
# 2  2  7 12
# 3  3  8 13

构建列表的子集

# 构建矩列表子集
# 列表中存储的数据为id、height、gender,而三个数据中,每个数据都由一个数组组成,数组内有一组数据
x <- list(id=1:4, height=170, gender="male")

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

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

x[[1]]
# [1] 1 2 3 4
# 要理解这个,为什么是两个括号,因为list里边的数据还是一个list

class(x["id"])
# [1] "list"

x[["id"]]
# [1] 1 2 3 4

class(x[["id"]])
# [1] "integer"

x$id
# [1] 1 2 3 4

x[c(1,3)]
# $id
# [1] 1 2 3 4
# $gender
# [1] "male"

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

# [1] 4
# $a[[2]]

# [1] 3
# $a[[3]]

# [1] 2
# $a[[4]]

# [1] 1

# $b
# [1] "Monday"  "Tuesday"

y[[1]]
# 获取第一个列表中含有列表的元素
# [[1]]
# [1] 4
# [[2]]
# [1] 3
# [[3]]
# [1] 2
# [[4]]
# [1] 1

y[[1]][2]
# 获取第一个列表中含有列表的对应值
# [[1]]
# [1] 3

y[[1]][[2]]
# [1] 3

y[[c(1,3)]]
# [1] 2

y[[c(2,2)]]
# [1] "Tuesday"

# 列表的不完全匹配
z <- list(abcdefg=1:10, abcd=1:4)
z$abcdefg
#  [1]  1  2  3  4  5  6  7  8  9 10
z$abcde
#  [1]  1  2  3  4  5  6  7  8  9 10

z[["abcde"]]
# NULL
z[["abcde", exact = FALSE]]
#  [1]  1  2  3  4  5  6  7  8  9 10

处理缺失值

# 处理缺失值

x <- c(1, NA, 2, NA, 3)
is.na(x)
# [1] FALSE  TRUE FALSE  TRUE FALSE

# 获取不是缺失值的值
x[!is.na(x)]
# [1] 1 2 3

y <- c("a", "b", NA, "c", NA)
z <- complete.cases(x,y)
z
# [1]  TRUE FALSE FALSE FALSE FALSE
# 做与的运算,例如1与1为1,1与0为0,0与0为0

x[z]
# [1] 1
y[z]
# [1] "a"

# 数据集
library(datasets)
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  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE
#  [16]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE
#  [31]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE
#  [46] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#  [61] FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE
#  [76]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
#  [91]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE
# [106]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE
# [121]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
# [136]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
# [151]  TRUE  TRUE  TRUE

# 获取没有缺失值的前1-10行数据
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

z <- x+y
z
# [1]  7  9 11 13 15
# 两个集合相加,需要是x是y的整数倍,或者是y是x的整数倍,当然不是整数倍也会计算

x*y
# [1]  6 14 24 36 50

y/x
# [1] 6.000000 3.500000 2.666667 2.250000 2.000000

x <- matrix(1:4, nrow=2, ncol=2)
y <- matrix(rep(2,4), nrow=2, ncol=2)
x
#      [,1] [,2]
# [1,]    1    3
# [2,]    2    4

y
#      [,1] [,2]
# [1,]    2    2
# [2,]    2    2

x*y
#      [,1] [,2]
# [1,]    2    6
# [2,]    4    8

y/x
#      [,1]      [,2]
# [1,]    2 0.6666667
# [2,]    1 0.5000000

# 矩阵乘法
x %*% y
#      [,1] [,2]
# [1,]    8    8
# [2,]   12   12

y <- 6:15
x <- 1:5
z <- x+y
z
#  [1]  7  9 11 13 15 12 14 16 18 20
y <- 6:11
z <- x+y
# Warning message:
# In x + y : 长的对象长度不是短的对象长度的整倍数
z
# [1]  7  9 11 13 15 12
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值