Язык R, как определить, являются ли пробелы в последовательностях цифр c случайными или смежными? - PullRequest
1 голос
/ 02 мая 2020

У меня есть много векторов числительных c данных, некоторые из которых содержат пробелы. Я должен определить, являются ли эти разрывы смежными или распределены более или менее случайным образом в каждом векторе. Пример, подобный этому, проиллюстрирован здесь:

# Let's create a couple of data vectors
x <- runif(1000)
y <- runif(1000)

# Let's add some NAs at random to x
x[sample(c(1:1000), 100, replace = F)] <- NA
# Let's add some continuous NAs to y
y[c(251:350)] <- NA

# And get the respective summaries
summary(x)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
0.00294 0.24446 0.51441 0.50535 0.76200 0.99850     100 
summary(y)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
0.00325 0.22178 0.47765 0.48207 0.73380 0.99969     100

То есть и x, и y имеют одинаковое количество пробелов, но в x они распределены случайным образом по вектору, а в y они агрегированы. Я должен обнаружить это, любая идея?

Ответы [ 2 ]

2 голосов
/ 02 мая 2020

Преврати его в тиббл, затем посмотри на стандартное отклонение номеров строк АН.

library(tidyverse)
myt <- tibble(X = x, Y = y) %>%  
  rowid_to_column("LINE") 

myt %>% 
  filter(is.na(X)) %>% 
  pull(LINE) %>% 
  sd()
# [1] 300.2694
myt %>% 
  filter(is.na(Y)) %>% 
  pull(LINE) %>% 
  sd()
# [1] 29.01149

1 голос
/ 03 мая 2020

Определение смежных или распределенных не очень ясно в посте.

Вот функция, которая возвращает TRUE, если хотя бы одна серия значений NA превышает длину n.

is_contiguous <- function(vec, n) with(rle(is.na(vec)), any(lengths[values] > n))

is_contiguous(x, 30)
#[1] FALSE

is_contiguous(y, 30)
#[1] TRUE
...