检查列中的数字是否按特定值递增(R 数据框)

check if numbers in a column are ascending by a certain value (R dataframe)

我在数据框中有一列数字(索引),如下所示。我正在尝试检查这些数字是否按值 1 升序排列。例如,B 组和 C 组不按 1 升序排列。虽然我可以目视检查,但我的数据框有数千行长,所以我会更喜欢自动化这个。有人有建议吗?谢谢!

group index

A     0
A     1
A     2
A     3
A     4
B     0
B     1
B     2
B     2
C     0
C     3
C     1
C     2
...

我认为这行得通。 diff计算后面两个数的差,然后我们可以用all看是否所有的差都为1,dat2就是最后的输出。

library(dplyr)

dat2 <- dat %>%
  group_by(group) %>%
  summarize(Result = all(diff(index) == 1)) %>%
  ungroup()
dat2
# # A tibble: 3 x 2
#   group Result
#   <chr> <lgl> 
# 1 A     TRUE  
# 2 B     FALSE 
# 3 C     FALSE 

数据

dat <- read.table(text = "group index
A 0
A 1
A 2
A 3
A 4
B 0
B 1
B 2
B 2
C 0
C 3
C 1
C 2",
                  header = TRUE, stringsAsFactors = FALSE)

也许aggregate能帮上忙

> aggregate(.~group,df1,function(v) all(diff(v)==1))
  group index
1     A  TRUE
2     B FALSE
3     C FALSE

我们可以逐组进行,获取当前值和先前值之间的差值 (shift) 并检查 all 差值是否等于 1。

library(data.table)
setDT(df1)[, .(Result = all((index - shift(index))[-1] == 1)), group]
#   group Result
#1:     A   TRUE
#2:     B  FALSE
#3:     C  FALSE

数据

df1 <- structure(list(group = c("A", "A", "A", "A", "A", "B", "B", "B", 
"B", "C", "C", "C", "C"), index = c(0L, 1L, 2L, 3L, 4L, 0L, 1L, 
2L, 2L, 0L, 3L, 1L, 2L)), class = "data.frame", row.names = c(NA, 
-13L))