R 使用十字遍历动态辅助标志以识别百分位数组



我有以下数据集(df & crs_walk):

start <- as.POSIXct("2020-01-01")
interval <- 60*60
end <- as.POSIXct("2020-03-31")
date_col <- seq(from=start, by=interval, to=end)
num_col <- runif(length(date_col), 100, 1000)
df <- bind_cols(date_col, num_col)
colnames(df)[1] <- "Date"
colnames(df)[2] <- "Value"
x <- c("Win1", "Win2", "Win3", "Win4")
y <- c(40, 1005, 450, 665)
pct <- c(.018519, .465278, .208333, .30787)
crs_walk <- cbind(x,y,pct)

我想根据以下规则将名称"Win1"、"Win2"、"Win3"或"Win4"分配给df中的新列。 如果df中的Value在前 1.8519% 或前 40 个值(如crs_walk中所述),我想将其标记为"Win1"。如果Value在下一组 1005 个值或前 46.5% 中,我想将其标记为"Win2",依此类推。

任何帮助将不胜感激!

这是我的方法:

library(dplyr)
arrange(df, Value) %>%
mutate(x = rep(crs_walk[, "x"], as.integer(crs_walk[, "y"])))

返回:

# A tibble: 2,160 x 3
Date                Value x    
<dttm>              <dbl> <chr>
1 2020-01-01 12:00:00  100. Win1 
2 2020-03-09 06:00:00  100. Win1 
3 2020-02-08 22:00:00  101. Win1 
4 2020-02-11 02:00:00  101. Win1 
5 2020-03-17 03:00:00  101. Win1 
6 2020-02-04 14:00:00  101. Win1 
7 2020-03-03 11:00:00  102. Win1 
8 2020-02-09 06:00:00  102. Win1 
9 2020-03-14 04:00:00  102. Win1 
10 2020-02-02 11:00:00  102. Win1 
# … with 2,150 more rows

最新更新