如何在R中自动查找给定数据集中最大断点的起点

如何在R中自动查找给定数据集中最大断点的起点,r,R,我试图找到给定数据的最大断点的起点。以下是我的例子: data <- data.frame(month = c(1:12), countx = c(60,69,10,13,65,80,59,84,43,21,18,10)) select <- data[data$countx >= 50,] #take value greater than 50 into account # find the break wtym <- select$mo

我试图找到给定数据的最大断点的起点。以下是我的例子:

data <- data.frame(month = c(1:12), countx = c(60,69,10,13,65,80,59,84,43,21,18,10))
select <- data[data$countx >= 50,]            #take value greater than 50 into account    

# find the break
wtym <- select$month
breaks <-  c(0, which(diff(wtym) != 1), length(wtym))
allbreak <- sapply(seq(length(breaks) - 1 ),
        function(i) wtym[(breaks[i] + 1):breaks[i+1]])
> allbreak
[[1]]
[1] 1 2
[[2]]
[1] 5 6 7 8

data听起来像是一个运行长度编码
?rle
任务,在该任务中,您要查找
x<50
x>=50
的运行。这里有一个函数:

bigbreak <- function(x, cutoff) {
  r <- rle(x >= cutoff)
  cumsum(r$l)[which(r$l == max(r$l[r$v]) & r$v)-1]+1
}

bigbreak(data$countx, 50)
#[1] 5

bigbreak使用
dplyr
data.table
的解决方案

# Create example data frame
data <- data.frame(month = c(1:12), countx = c(60,69,10,13,65,80,59,84,43,21,18,10))

# Load package
library(dplyr)
library(data.table)

# Process the data
data2 <- data %>%
  mutate(Condition = countx >= 50) %>%
  mutate(RunID = rleid(Condition)) %>%
  filter(Condition) %>%
  group_by(RunID) %>%
  mutate(num = n()) %>%
  ungroup() %>%
  filter(num == max(num))

# Show the number of the first month
data2$month[1]
[1] 5
#创建示例数据帧
数据=50)%>%
突变(RunID=rleid(条件))%>%
过滤器(条件)%>%
分组依据(RunID)%>%
变异(num=n())%>%
解组()%>%
过滤器(num==max(num))
#显示第一个月的编号
数据2$month[1]
[1] 5

什么是
wtym
?对不起,我从原始代码中编辑了一点,因此少了一行。上面是编辑的。谢谢,太好了。似乎是我需要的。但当我运行时,我收到消息“max(n)中的错误:参数的“type”(closure)无效”。你没有相同的消息吗?请查看我的更新。R可能会因为列名
n
和函数
n()
相似而混淆。我将列名从
n
更改为
num
。再试一次,看看是否有帮助。太棒了!非常感谢你。实际上,我运行了大量数据集(大约1000个单个文件),但是来自一个文件的每个结果都有两列数据框(例如)。所以,如果解决了一个文件,我可以将它们放入一个循环来执行所有操作。谢谢你,有收获了。
# Create example data frame
data <- data.frame(month = c(1:12), countx = c(60,69,10,13,65,80,59,84,43,21,18,10))

# Load package
library(dplyr)
library(data.table)

# Process the data
data2 <- data %>%
  mutate(Condition = countx >= 50) %>%
  mutate(RunID = rleid(Condition)) %>%
  filter(Condition) %>%
  group_by(RunID) %>%
  mutate(num = n()) %>%
  ungroup() %>%
  filter(num == max(num))

# Show the number of the first month
data2$month[1]
[1] 5