如何检查一列中预先确定的数字序列是否在 r 中一个一个地出现?
how to check if a pre-determined sequence of numbers in a column is one by one in r?
我有一个名为 dataframe
的 mydata
(5x2000141),它有一个名为 target_ID
(数字)的列,它标识一个 ID
(字符)用于单个 date
(日期)与结果 R
(数字)相关联。 target_ID
对于特定 date
中的 ID
是唯一的。
备注:
ID
在数据框中重复多次(相同的 ID
在不同的日期测量)。
dates
不同ID可以相同
- 每个
target_ID
、ID
和 date
都有 1748 个条目 N
,每个条目都有关联的结果“R”。
这是我的数据框 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
的一个很好的赞美是 seqle
在 cgwtools
包中找到,它提供 lenghts\values 输出但用于序列。除了确认特征(是否升序)之外,将 rle 和 seqle 索引与 which
逻辑相结合可能会让您获得几乎唯一的值。
我有一个名为 dataframe
的 mydata
(5x2000141),它有一个名为 target_ID
(数字)的列,它标识一个 ID
(字符)用于单个 date
(日期)与结果 R
(数字)相关联。 target_ID
对于特定 date
中的 ID
是唯一的。
备注:
ID
在数据框中重复多次(相同的ID
在不同的日期测量)。dates
不同ID可以相同- 每个
target_ID
、ID
和date
都有 1748 个条目N
,每个条目都有关联的结果“R”。
这是我的数据框 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
的一个很好的赞美是 seqle
在 cgwtools
包中找到,它提供 lenghts\values 输出但用于序列。除了确认特征(是否升序)之外,将 rle 和 seqle 索引与 which
逻辑相结合可能会让您获得几乎唯一的值。