R 在向量中选择多个head()和tail()值
我有一个向量,如下所示:R 在向量中选择多个head()和tail()值,r,vector,R,Vector,我有一个向量,如下所示: v <- c(1,3,4,5,6,7,8,9,NA,NA,NA,NA,27,25,30,41,NA,NA) v我们基于逻辑向量(is.na(v))创建一个带有rleid的分组变量,使用该变量在tapply中选择每个组的第一个和最后一个值,取消列出列表输出,使用NA删除NA元素。省略并使用c删除属性 library(data.table) c(na.omit(unlist(tapply(v, rleid(is.na(v)), function(x) c(x[1],
v <- c(1,3,4,5,6,7,8,9,NA,NA,NA,NA,27,25,30,41,NA,NA)
v我们基于逻辑向量(is.na(v)
)创建一个带有rleid
的分组变量,使用该变量在tapply
中选择每个组的第一个和最后一个值,取消列出列表
输出,使用NA删除NA元素。省略并使用c
删除属性
library(data.table)
c(na.omit(unlist(tapply(v, rleid(is.na(v)), function(x) c(x[1],
x[length(x)])), use.names=FALSE)))
#[1] 1 9 27 41
或者另一个选项是rle
frombase R
v[with(rle(!is.na(v)), {
i1 <- cumsum(lengths)
i2 <- lengths[values]
c(rbind(i1[values] - i2 + 1 , i1[values]))
})]
#[1] 1 9 27 41
v[带(rle(!is.na(v)){
i1另一个可能的解决方案是,通过基R根据向量中的NA
条目拆分,lappy
头和tail
函数并移除NA
,即
ind <- unname(unlist(lapply(split(v, cumsum(c(1, diff(is.na(v)) != 0))), function(i)
c(head(i, 1), tail(i, 1)))))
ind[!is.na(ind)]
#[1] 1 9 27 41
indA基本R解决方案:
x = na.omit( v[is.na(c(NA,diff(v))) | is.na(c(diff(v),NA))] )
> as.numeric(x)
# [1] 1 9 27 41
多亏了你们的回答和解释,我对数据的了解越来越多。表:)这会选择单个非NA元素两次。在c(v,30)上试试
@siralen这可以通过使用unique
包装来解决,我不确定这些情况下的行为,因为问题中没有解释这会选择单个非NA元素两次。在c(v,30)上尝试
也许OP希望如此…?问题中没有解释。回到这个问题再举一个例子,它有重复的条目,您的答案非常有效!