【发布时间】:2017-04-28 19:39:18
【问题描述】:
所以我有一个包含两列的数据框:
set.seed(123)
nrows <- 100
my_data <- data.frame(side = sample(c(-1, 1), nrows, replace = TRUE),
value = 1:nrows)
一个称为值(测量时间)和一个称为边,其中包含两个值(-1 和 1)。
对于每一行,我需要知道自上次出现边不等于当前边的行以来经过了多少时间(增量值)。在慢 R 代码中:
slow_function <- function(my_data){
stopifnot(!is.null(my_data$side))
stopifnot(!is.null(my_data$value))
value_past <- rep(NA, nrow(my_data))
for(i in 2:nrow(my_data)){
current_value <- -1 * my_data$side[i]
last_mirror <- rev(which(my_data$side[1:(i-1)] == current_value))[1]
value_past[i] <- my_data$value[i] - my_data$value[last_mirror]
}
return(value_past)
}
my_data$res <- slow_function(my_data)
head(my_data)
# side value res
# 1 -1 1 NA
# 2 1 2 1
# 3 -1 3 1
# 4 1 4 1
# 5 1 5 2
# 6 -1 6 1
我正在尝试使用 dplyr 或 data.table 魔术快速完成此操作。
【问题讨论】:
标签: r data.table dplyr