如何检查一列中预先确定的数字序列是否在 r 中一个一个地出现?

how to check if a pre-determined sequence of numbers in a column is one by one in r?

我有一个名为 dataframemydata (5x2000141),它有一个名为 target_ID(数字)的列,它标识一个 ID(字符)用于单个 date(日期)与结果 R(数字)相关联。 target_ID 对于特定 date 中的 ID 是唯一的。 备注:

这是我的数据框 mydata 的样子:

N target_ID ID date R
1 1 a1 2011-04-12 1
2 1 a1 2011-04-12 1
3 1 a1 2011-04-12 3
.... .. .. .... ..
1748 1 a1 2011-04-12 5
1749 2 a2 2011-04-12 5
1750 2 a2 2011-04-12 2
... .. .. .... ..
3495 2 a2 2011-04-12 2
3496 2 a2 2011-04-12 4
.... .. .. .... ..
384560 292 p5 2012-03-09 9
384561 292 p5 2012-03-09 9
.... .. .. .... ..
386306 292 p5 2012-03-09 1
386307 292 p5 2012-03-09 3
386308 293 t1 2012-03-09 3
.... .. .. .... ..

我的问题如下:我正在尝试检查(例如:TRUE 或 FALSE)在 1748 年的每 1748 个条目中,“target_ID”是否遵循 1 乘 1 值的升序。我使用了这个代码:mydata2 <- mydata %>% group_by(target_ID) %>% summarize(Result = all(diff(target_ID) == 1)) %>% ungroup() 但由于我没有每 1748 个条目的唯一对象 1748,结果并没有给我我假装的结果。 我也试过 mydata2 <- mydata %>% group_by(target_ID, date) %>% summarize(Result = all(diff(target_ID) == 1)) %>% ungroup() 但函数 group_by 不允许两列。

任何帮助将不胜感激:)

一个想法:构造一个想要的序列来与你的mydata进行比较,例如

df <- data.frame(target_ID = rep(1:292,each = 1748))
bench.ID <- rep(1:292, each = 1748)
identical(df$target_ID,bench.ID)

使用相同的单列:

df <- data.frame(target_ID = rep(1:292,each = 1748))

上升测试:

is.unsorted(rle(df$target_ID)$values)
[1] FALSE # so it is ascending

测试一致长度:

length(which(rle(df$target_ID)$lengths == 1748))
[1] 292

rle 的一个很好的赞美是 seqlecgwtools 包中找到,它提供 lenghts\values 输出但用于序列。除了确认特征(是否升序)之外,将 rle 和 seqle 索引与 which 逻辑相结合可能会让您获得几乎唯一的值。