R 基于另一列有条件地返回某些行值的向量';s行值

R 基于另一列有条件地返回某些行值的向量';s行值,r,dataframe,time-series,R,Dataframe,Time Series,这是一个可复制的数据集: set.seed(55); data <- rnorm(12); dates <- as.POSIXct("2019-03-18 10:30:00", tz = "CET") + 0:(length(data)-1)*60; R <- xts(x = data, order.by = dates) %>% sample(size = 10) %>% fortify.zoo() colnames(R) <- c("Time"

这是一个可复制的数据集:

set.seed(55);
data <- rnorm(12);
dates <- as.POSIXct("2019-03-18 10:30:00", tz = "CET") + 0:(length(data)-1)*60;

R <- xts(x = data, order.by = dates) %>%
  sample(size = 10) %>%
  fortify.zoo()

colnames(R) <- c("Time", "Rf");
R$lab <- "A"
R$lab[c(5, length(R$lab))] <- "BB"
R$diff <- c(NA, diff(R$Rf))
当“lab”列的对应值为“a”时,我试图将列“diff”的行作为向量返回。但条件是,对于“BB”,不仅删除了相应的diff值,而且还跳过了上下两行的两个立即值

在上述示例中,预期有以下输出:

> res
[1]  0.0314439 -1.2708040  0.4045876 -0.1069435
你能帮忙吗?谢谢你可以试试

inds <- which(R$lab == "BB")
R$diff[-unique(c(inds - 1, inds, inds + 1))]

不要用分号结束代码行,R不是C。分号是指令分隔符,所以
instr1是两条指令:
instr1;空值
.Upvote但更简单:
R$diff[-sapply(inds,
+
,-1:1)]
。(加号周围有反勾号。)@Ronaksah,我在没有使用unique()的情况下尝试了您的代码,这给了我相同的结果。你能解释一下为什么我们需要在这里使用unique()吗?是的,它应该在没有
unique
的情况下也能工作。我在这里使用它是因为在某些情况下,一些数字可能重叠,这意味着两个“BB”值彼此相邻。在这种情况下,我们只能得到唯一的索引。
inds <- which(R$lab == "BB")
R$diff[-unique(c(inds - 1, inds, inds + 1))]
R$diff[-sapply(inds, `+`, -1:1)]