【问题标题】:Finding index position of maximum run for a given value using rle()使用 rle() 查找给定值的最大运行的索引位置
【发布时间】:2018-11-12 15:46:15
【问题描述】:

earlier question 中,有人发布了答案:

set.seed(100)
coins <- sample(c("H", "T"), 1000, replace = TRUE)
rle_coins <- rle(coins)
max(rle_coins$lengths[rle_coins$values == "H"])

我想知道,根据上述答案,我将如何发现最长的 Heads 的索引位置?

【问题讨论】:

  • 准确地说,最长run的索引位置是多少?第一个索引,每个索引,最后一个索引?????? rle-coinscoins 的索引?
  • 1000 更改为 20SHOW你想要什么。
  • 我正在寻找来自 rle_coins 的索引。因此,将 1000 更改为 20,它看起来像是 4 的答案,但我正在寻找的答案是 3,因为它是第三个数字; > max(rle_coins$lengths[rle_coins$values == "H"]) [1] 4 > rle_coins$lengths [1] 2 2 4 2 2 1 1 1 3 2 >
  • 我找到了解决方案,但我将 rle 列表转换为数据框,然后进行了一些数据整理。你会接受它作为解决方案吗?
  • 是的,我认为这可行

标签: r indexing


【解决方案1】:
set.seed(100)
coins <- sample(c("H", "T"), 1000, replace = TRUE)


rle_coins <- rle(coins)


##Create a data frame with information
##Index start refers to the index where the run starts
k <- tibble(value = rle_coins$values,
       streak = rle_coins$lengths) %>%
  mutate(index_start = c(1, rep(0,length(rle_coins$lengths)-1)))

#For loop to mutate the index_start variable
for(i in 2:nrow(k)){
    k$index_start[i] <- k$index_start[i-1] + k$streak[i-1]
}
remove(i)

##Filtering the data frame to obtain the largest run
k %>% group_by(value) %>% top_n(1,streak) %>% filter(value == "H")

【讨论】:

    【解决方案2】:
    grep("H", rle_coins$values)[which.max(rle_coins$lengths[rle_coins$values=="H"])]
    

    【讨论】:

    • 请在您的代码中添加一些描述。
    猜你喜欢
    • 1970-01-01
    • 2010-10-19
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多