zoukankan      html  css  js  c++  java
  • R学习-6.Subsetting Vectors

    Subsetting Vectors

    这一节,学习如何获取vector的子集。比如选取一个向量中的前20个元素、选取非NA的元素、或者大于某个数的元素等。

    选取子集的方式类似X[index_vector],Xindex_vector都是向量,通过调用X[index_vector],R会根据index_vectorX里挑选出特定的元素。

    index vector有四种类型:逻辑向量(logical vectors)、正整数向量( vectors of positive integers)、负整数向量( vectors of negative integers)和字符串向量( vectors of character strings)

    先来看看正整数的index vector。注意R里的索引是从1开始的。而大多编程语言中是从0开始。编写程序时,注意索引不要是0和超过向量的长度值,当你这样做时,R不会报错,但会返回无意义的结果。

    > x <- c(seq(10,1), rep(NA,10))
    > x
     [1] 10  9  8  7  6  5  4  3  2  1 NA NA NA NA NA NA NA NA NA NA
    > x[1:5] # 选取前5个元素
    [1] 10  9  8  7  6 
    > x[5:10] # 选取第5到第10个的元素
    [1] 6 5 4 3 2 1
    > x[c(1, 3, 5, 8)] # 也可以选取特定位置的元素
    [1] 10  8  6  3
    > x[6] # 选第6个
    [1] 5
    > x[0]
    integer(0)
    > x[100]
    [1] NA
    

    接下来看看负整数的index vector,负索引值,会排除负索引值的绝对值的相应位置的元素。比如:

    > x <- c(seq(10,1), rep(NA,10))
    > x[-1] # 第一个元素被排除了
     [1]  9  8  7  6  5  4  3  2  1 NA NA NA NA NA NA NA NA NA NA
    > x[c(-1, -2 , -10)]
     [1]  8  7  6  5  4  3  2 NA NA NA NA NA NA NA NA NA NA
    

    然后是logical vectors,这是一个向量,其包含的元素是TRUEorFALSE

    > x <- c(seq(10,1), rep(NA,10))
    > is.na(x)
     [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE
    [13]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
    > x[is.na(x)] # 获取是NA的元素
     [1] NA NA NA NA NA NA NA NA NA NA
    > y <- x[!is.na(x)] 获取是非NA的元素
    > y
     [1] 10  9  8  7  6  5  4  3  2  1
    

    使用logical vectors,操作性更强,更灵活。可以组合比较运算逻辑表达式等获得子集。

    > y[y > 7] # 选取y中大于7的元素
    [1] 10  9  8
    > y[y < 5] # 选取y中小于5的元素
    [1] 4 3 2 1
    > y[(y > 7) | (y < 5)] # 选取中大于7或小于5的元素
    [1] 10  9  8  4  3  2  1
    

    最后是字符索引。我们需要创造一个向量元素有名字的向量。通过函数names()可以获取vector names 也可以赋予一个向量names。

    > vect <- c(foo = 11, bar =2, norf = NA)
    > vect
     foo  bar norf 
      11    2   NA
    > names(vect) # 通过函数names()获取向量元素名字
    [1] "foo"  "bar"  "norf"
    > vect2 <- c(11, 2, NA)
    > names(vect2) <- c("foo", "bar", "norf") # names赋值
    > names(vect2) # 
    [1] "foo"  "bar"  "norf"
    

    向量元素有了名字,我们就可以通过名字来取得相应的元素了。

    > vect["bar"]
    bar 
      2
    > vect[c("foo", "bar")]
    foo bar 
     11   2 
    

    上一节:R学习-5.Missing Values

    下一节:R学习-7.Matrices and Data Frames

  • 相关阅读:
    GIT 常用
    项目中用到字符串扩展
    Windows应用程序兼容性注册表解决方案
    添加IDA右键菜单
    国内加速访问Github
    使用Kcptun+socks5代理,速度杠杠的
    SS添加kcptun插件方法
    更改VSCode的插件目录
    msvcrt.dll 导出/导入函数列表
    EditPlus 添加 打开文件所在文件夹 功能
  • 原文地址:https://www.cnblogs.com/huanping/p/13162057.html
Copyright © 2011-2022 走看看