【问题标题】:R shortcut to getting last n entries in a vector [duplicate]R获取向量中最后n个条目的快捷方式[重复]
【发布时间】:2013-01-31 20:03:08
【问题描述】:

这可能是多余的,但我在 SO 上找不到类似的问题。

在计算中不使用向量的长度获取向量或数组中的最后 n 个元素/条目是否有捷径?

foo <- 1:23

> foo
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

假设一个人想要最后 7 个实体,我想避免这种繁琐的语法:

> foo[(length(foo)-6):length(foo)]
[1] 17 18 19 20 21 22 23

Python 有foo[-7:]。 R中有类似的东西吗?谢谢!

【问题讨论】:

    标签: arrays r vector indexing


    【解决方案1】:

    如果你有很棒的尾部功能,这不是一个好主意,但这里有一个替代方案:

    n <- 3
    rev(rev(foo)[1:n])
    

    我正在为反对票做准备。

    【讨论】:

    • +1 用于巧妙地使用rev。也避免使用长度(foo)。为什么R不能像Python一样使用len而不是length?!节省 50% 的打字时间。
    • 我喜欢第一个,但第二个显然是他们在原始问题中试图避免的。
    • @Dason 好点我删除了它,因为海报明确表示他们不屑于长度。
    • @rmk - 如果你真的不想每次都输入这 3 个字符,你可以随时使用 len &lt;- length
    【解决方案2】:

    你想要tail函数

    foo <- 1:23
    tail(foo, 5)
    #[1] 19 20 21 22 23
    tail(foo, 7)
    #[1] 17 18 19 20 21 22 23
    x <- 1:3
    # If you ask for more than is currently in the vector it just
    # returns the vector itself.
    tail(x, 5)
    #[1] 1 2 3
    

    除了head,还有一些简单的方法可以获取所有除了向量的最后/前n个元素。

    x <- 1:10
    # Grab everything except the first element
    tail(x, -1)
    #[1]  2  3  4  5  6  7  8  9 10
    # Grab everything except the last element
    head(x, -1)
    #[1] 1 2 3 4 5 6 7 8 9
    

    【讨论】:

    • 加一个,并想注意tailhead 的良好负索引属性,以供未来的搜索者使用。您也可以说“给我除了最后 n 个元素/行之外的所有内容”:head(foo, -2)
    • @TylerRinker 好点 - 这是很好的信息,我将其添加到答案中。
    猜你喜欢
    • 2013-08-29
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    相关资源
    最近更新 更多