R 如何定义不包含';是否有按特定行顺序排列的NAs?

R 如何定义不包含';是否有按特定行顺序排列的NAs?,r,dataframe,indexing,sequence,R,Dataframe,Indexing,Sequence,以下是一些示例数据: df1 <- read.table(text = "Date Client1 Client2 Client3 01.01.2019 0 0 2 01.02.2019 0 0 3 01.03.2019 0 0 4 01.04.2019 0 0 4

以下是一些示例数据:

    df1 <- read.table(text = "Date  Client1 Client2 Client3
                  01.01.2019    0   0   2
                  01.02.2019    0   0   3
                  01.03.2019    0   0   4
                  01.04.2019    0   0   4
                  01.05.2019    0   0   4
                  01.06.2019    1   0   4
                  01.07.2019    0   0   0
                  01.08.2019    0   0   1
                  01.09.2019    0   0   0
                  01.10.2019    0   3   0
                  01.11.2019    0   0   2
                  01.12.2019    2   0   0
                  01.01.2020    3   4   3
                  01.02.2020    4   0   3
                  01.03.2020    5   0   0
                  01.04.2020    5   0   0
                  ", header = TRUE)
df1[df1 == 0] <- NA
我会使用
rle()
函数来计算
的运行长度!is.na()
。例如,使用您对
df1
的定义:

df2 <- data.frame(Name = character(3), Group = character(3))

for (i in 1:3) {
  runs <- rle(!is.na(df1[, i + 1]))
  good <- which(runs$values == TRUE)
  runs <- runs$lengths
  n <- length(runs)
  df2$Group[i] <- if (n %in% good) "Stable"
                  else if (max(runs[good]) >= 5) "Was_Stable"
                  else "Not_Stable"
  df2$Name[i] <- names(df1)[i + 1]
}

df2您可以使用
sapply
对列进行迭代,并使用
any
进行检查:

sapply(df1[-1], function(x) any(with(rle(!is.na(x)), values & lengths >= 5)))

# Client1 Client2 Client3 
#   TRUE   FALSE    TRUE 
与类似,您可以像这样使用
rle

#添加不带NAs的列作为示例
df1(4),正确)
#R> 客户1客户2客户3
#R> 真假假真

很抱歉问题被更改。我觉得很难回答。因此,它变得更简单。但对于过去的那个问题,我得到了(
警告消息:1:in
[听起来您使用的是旧版本的R,它将字符转换为因子。您应该升级到4.0.3。问题由
df2解决
sapply(df1[-1], function(x) any(with(rle(!is.na(x)), values & lengths >= 5)))

# Client1 Client2 Client3 
#   TRUE   FALSE    TRUE