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