美文网首页
76.关于向量取子集

76.关于向量取子集

作者: 心惊梦醒 | 来源:发表于2021-10-25 22:24 被阅读0次

    【上一篇:75.关于原子向量类型的强制转换和向量元素的命名】
    【下一篇:77.关于列表-Recursive vectors】

    四种取子集的方式

        对向量取子集有四种方式:1)索引方式;2)逻辑值方式;3)名字方式;4)中括号留空。
        索引方式:指定一个仅包含正值、负值或0的numeric vectors,值代表元素索引。可以全是正值,也可以全是负值,也可以是0,但正值和负值不能混合使用。全是正值表示从向量中提取对应索引处的元素,全是负值表示从向量中剔除对应索引处的元素,0则返回空值。对全是正值的情况,值可以重复,返回的结果中元素也会重复。向量是矢量的,也就是有方向的,要跟集合区分开。

    > x <- c("one", "two", "three", "four", "five")
    # 全正值
    > x[c(3, 2, 5)]
    [1] "three" "two"   "five" 
    # 重复正值
    > x[c(1, 1, 5, 5, 5, 2)]
    [1] "one"  "one"  "five" "five" "five" "two" 
    # 全负值
    > x[c(-1, -3, -5)]
    [1] "two"  "four"
    

        逻辑值方式:一个长度等于输入向量的逻辑向量,返回对应位置处为TRUE的元素。

    > x <- c(10, 3, NA, 5, 8, 1, NA)
    > x[!is.na(x)]
    [1] 10  3  5  8  1
    

        名字方式:对命名向量(named vectors),可以通过其名字取子集。

    > x <- c(abc = 1, def = 2, xyz = 5)
    > x[c("xyz", "def")]
    xyz def 
      5   2 
    

        中括号留空方式:x[]返回向量本身。这种方式对向量没有用处,但在data frame和tibble中,可以通过留空保留所有的行或列。例如:

    mtcars[,c("mpg")]:提取mpg列,行数保持不变
    mtcars[mtcars$mpg>18,]:提取mpg>18的行,列不变
    中括号中,逗号前后分别表示数据框的两个维度:行和列,留空表示不对哪个维度进行操作
    

    取子集函数

        上文提到的取子集方法实际上使用了函数:"[",这是针对向量取子集的一个工具。这个函数还有一个变形:"[["。后者仅仅提取单个元素且总是丢掉名字。例如:

    > x <- c(abc = 1, def = 2, xyz = 5)
    # 取两个元素,结果带名字
    > x[c("abc","def")]
    abc def 
      1   2 
    # 取一个元素,结果带名字
    > x[c("abc")]
    abc 
      1 
    # 取一个元素,扔掉名字
    > x[[c("abc")]]
    [1] 1
    # 不能对多个元素进行操作
    > x[[c("abc","def")]]
    Error in x[[c("abc", "def")]] : 
      attempt to select more than one element in vectorIndex
    

        "["和"[["在向量中的使用频率并不大,但列表中的应用尤其重要。下一篇就是将列表了,敬请关注。

    【上一篇:75.关于原子向量类型的强制转换和向量元素的命名】
    【下一篇:77.关于列表-Recursive vectors】

    相关文章

      网友评论

          本文标题:76.关于向量取子集

          本文链接:https://www.haomeiwen.com/subject/fpqlaltx.html