检查列中的数字是否按特定值递增(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))
我在数据框中有一列数字(索引),如下所示。我正在尝试检查这些数字是否按值 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))