假设我有一个向量,它嵌套在一个有一级或二级的数据框架中。是否有一种快速而肮脏的方法来访问最后一个值,而不使用length()函数?一些ala PERL的$#特殊的var?
所以我想要这样的东西:
dat$vec1$vec2[$#]
而不是:
dat$vec1$vec2[length(dat$vec1$vec2)]
假设我有一个向量,它嵌套在一个有一级或二级的数据框架中。是否有一种快速而肮脏的方法来访问最后一个值,而不使用length()函数?一些ala PERL的$#特殊的var?
所以我想要这样的东西:
dat$vec1$vec2[$#]
而不是:
dat$vec1$vec2[length(dat$vec1$vec2)]
当前回答
包数据。表包含最后一个函数
library(data.table)
last(c(1:10))
# [1] 10
其他回答
有什么关于
> a <- c(1:100,555)
> a[NROW(a)]
[1] 555
dplyr包包含一个函数last():
last(mtcars$mpg)
# [1] 21.4
我有另一种方法来求向量的最后一个元素。 假设向量是a。
> a<-c(1:100,555)
> end(a) #Gives indices of last and first positions
[1] 101 1
> a[end(a)[1]] #Gives last element in a vector
[1] 555
好了!
我刚刚在663,552行的数据帧上使用以下代码对这两种方法进行了基准测试:
system.time(
resultsByLevel$subject <- sapply(resultsByLevel$variable, function(x) {
s <- strsplit(x, ".", fixed=TRUE)[[1]]
s[length(s)]
})
)
user system elapsed
3.722 0.000 3.594
and
system.time(
resultsByLevel$subject <- sapply(resultsByLevel$variable, function(x) {
s <- strsplit(x, ".", fixed=TRUE)[[1]]
tail(s, n=1)
})
)
user system elapsed
28.174 0.000 27.662
所以,假设你在处理向量,访问长度位置要快得多。
另一种方法是取反转向量的第一个元素:
rev(dat$vect1$vec2)[1]