R语言-0基础学习2-构建子集
2020-04-19 本文已影响0人
lietobrain
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-常见操作
构建子集
获取预处理数据
- 原始数据,经过预处理后的数据
- []:提取一个或多个类型相同的元素
[[]]:从列表或数据框中提取元素
$:按名字从列表或数据框中提取元素
# 构建子集
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