【W1】子集subsetting

基本类型

  • { : 返回类型与原集合一样,可以提取多个元素
  • [[ : list 或者 Dataframe,只能选提取一个元素
  • $ : 提取list中的一个元素,且该元素必须有name,返回的类型可能和和原来的不同
> x <- c("a", "b", "c", "c", "d", "a")
> x[1]
[1] "a"
> x[2]
[1] "b"
> x[1:4]
[1] "a" "b" "c" "c"
> x[x > "a"]
[1] "b" "c" "c" "d"
> u <- x > "a"  // 判断是否大于a
> u
[1] FALSE TRUE TRUE TRUE TRUE FALSE
> x[u]
[1] "b" "c" "c" "d"

列表

> x <- list(foo = 1:4, bar = 0.6)
> x[1]
$foo
[1] 1 2 3 4      //[ ] 得到的是list列表
> x[[1]]
[1] 1 2 3 4     // [[ ]] 得到的是vector数列
> x$bar
[1] 0.6
> x[["bar"]]  
[1] 0.6
> x["bar"]     // [ ] 得到的是列表
$bar
[1] 0.6

[[ ]] 和 $ 不能用来获取一个list的多个元素 -> 只能用单方括号 [ ]

> x <- list(foo = 1:4, bar = 0.6, baz = "hello")
> x[c(1, 3)]    // 选取第一和第三个元素(foo 和 baz)
$foo
[1] 1 2 3 4
$baz
[1] "hello"

$ 只能用于绝对的名字的索引

> x <- list(foo = 1:4, bar = 0.6, baz = "hello")
> name <- "foo"
> x[[name]]           // computed index for ‘foo’
[1] 1 2 3 4
> x$name           // element ‘name’ doesn’t exist!
NULL
> x$foo
[1] 1 2 3 4         /// element ‘foo’ does exist

[[ ]] 可提取整数,列表的递归

> x <- list(a = list(10, 12, 14), b = c(3.14, 2.81))
> x[[c(1, 3)]]     // 用向量(1,3)选取第一个元素的第3个元素
[1] 14
> x[[1]][[3]]
[1] 14
> x[[c(2, 1)]]
[1] 3.14

矩阵

> x <- matrix(1:6, 2, 3)      //建立2行3列 1-6 的矩阵 
> x[1, 2]
[1] 3     // 返回数字
> x[2, 1]
[1] 2
> x[1, ]      // 提取第一行
[1] 1 3 5
> x[, 2]    // 提取第二列
[1] 3 4

By default, when a single element of a matrix is retrieved, it is returned as a vector of length 1 rather
than a 1 × 1 matrix. This behavior can be turned off by setting drop = FALSE.
默认下,当在矩阵中取一个元素的时候,返回的是长度为1的向量,而不是1*1 的矩阵,可以通过“drop=FALSE”修改

> x <- matrix(1:6, 2, 3)
> x[1, 2]
[1] 3        // 默认下,长度为1的向量
> x[1, 2, drop = FALSE]
 [,1]
[1,] 3   /// 1*1的矩阵

x <- matrix(1:6, 2, 3)
x[1, ]
[1] 1 3 5 // 返回向量
x[1, , drop = FALSE]
[,1] [,2] [,3]
[1,] 1 3 5 // 返回1*3矩阵
``

模糊匹配

双方括号 [[ 和 $ 可用来模糊匹配

> x <- list(aardvark = 1:5)
> x$a
[1] 1 2 3 4 5
> x[["a"]]
NULL
> x[["a", exact = FALSE]]
[1] 1 2 3 4 5

删除NA

  1. is.na()
> x <- c(1, 2, NA, 4, NA, 5)
> bad <- is.na(x)        // bad->逻辑向量
> x[!bad]
[1] 1 2 4 5
  1. complete.cases()
> x <- c(1, 2, NA, 4, NA, 5)
> y <- c("a", "b", NA, "d", NA, "f")
> good <- complete.cases(x, y)
> good
[1] TRUE TRUE FALSE TRUE FALSE TRUE
> x[good]
[1] 1 2 4 5
> y[good]
[1] "a" "b" "d" "f"
> airquality[1:6, ]
 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
> good <- complete.cases(airquality)
> airquality[good, ][1:6, ]
 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值