首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试一个区段序列中是否存在空白?

如何测试一个区段序列中是否存在空白?
EN

Stack Overflow用户
提问于 2016-02-19 15:47:30
回答 2查看 115关注 0票数 4

我在一个数据集中有几个(冰)核心部分示例(下面的示例中是ID)。有些核心有缺失的部分(即空白),但我不知道哪些部分。如何用R来找出这个?

示例:

代码语言:javascript
复制
dt <- structure(list(ID = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 
3L, 3L, 3L), .Label = c("a", "b", "c"), class = "factor"), Sec.start = c(0, 
5, 10, 20, 50, 100, 200, 0, 5, 10, 30), Sec.end = c(5, 10, 20, 
30, 100, 200, 400, 5, 10, 20, 50), Section = c("0-5", "5-10", 
"10-20", "20-30", "50-100", "100-200", "200-400", "0-5", "5-10", 
"10-20", "30-50")), .Names = c("ID", "Sec.start", "Sec.end", 
"Section"), row.names = c(NA, -11L), class = "data.frame")

dt

    ID Sec.start Sec.end Section
1   a         0       5     0-5
2   a         5      10    5-10
3   a        10      20   10-20
4   a        20      30   20-30
5   b        50     100  50-100
6   b       100     200 100-200
7   b       200     400 200-400
8   c         0       5     0-5
9   c         5      10    5-10
10  c        10      20   10-20
11  c        30      50   30-50

"a“和"b”没有空白处,而"c“有空隙( 20至30之间缺了一段),所以我的结果如下:

代码语言:javascript
复制
$a
[1] TRUE

$b
[1] TRUE

$c
[1] FALSE
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-19 15:53:02

你可以试试:

代码语言:javascript
复制
lapply(split(dt,dt$ID),function(x) all(x[-1,2]==x[-nrow(x),3]))
#$a
#[1] TRUE
#$b
#[1] TRUE
#$c
#[1] FALSE
票数 4
EN

Stack Overflow用户

发布于 2016-02-19 15:56:35

下面是一种dplyr方法:

代码语言:javascript
复制
library(dplyr)
dt %>% 
  group_by(ID) %>% 
  summarise(check = all(Sec.end == lead(Sec.start, default = last(Sec.end))))
#Source: local data table [3 x 2]
#
#      ID check
#  (fctr) (lgl)
#1      a  TRUE
#2      b  TRUE
#3      c FALSE

也可以使用data.table

代码语言:javascript
复制
library(data.table)
setDT(dt)[, .(check = all(Sec.end == shift(Sec.start, 1L, 'lead', fill = last(Sec.end)))), 
               by=ID]
#   ID check
#1:  a  TRUE
#2:  b  TRUE
#3:  c FALSE

这两种方法都使用延迟/引导函数(在data.table中称为shift)将每个Sec.end值与下一行的Sec.start值进行比较。在最后一行中,在没有前导Sec.start值的情况下,我们提供一个默认值,即最后一行的Sec.end --这意味着最后一行(每个ID)始终是TRUE。我们使用all检查每个ID是否所有的比较都是TRUE

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35509282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档