R - пары значений в одном векторе: как обнаружить пропущенные значения? - PullRequest
0 голосов
/ 04 ноября 2018

У меня длинный вектор, состоящий из пар значений; годы в паре с баллами. Количество символов в каждом значении всегда одинаково (4 символа для года, 3 символа для оценки).

data <- c("2018", "5.5", "2016", "8.4", "2017", "6.6", "2018", "2017", "5.5", 
"2009", "7.9")

Проблема в том, что некоторые оценки отсутствуют, а все годы присутствуют:

matrix(data, ncol = 2, byrow = T)

[,1]   [,2]  
[1,] "2018" "5.5" 
[2,] "2016" "8.4" 
[3,] "2017" "6.6" 
[4,] "2018" "2017"
[5,] "5.5"  "2009"
[6,] "7.9"  "2018"

Таким образом, я не могу структурировать данные путем преобразования их в матрицу или фрейм данных, когда пары значений сдвинуты.

Есть ли способ обнаружить, когда имеет место несоответствие, т.е. за годом следует еще один год и вставьте NA между двумя значениями?

1 Ответ

0 голосов
/ 04 ноября 2018

Конечно, вот довольно компактный способ:

idx <- which(nchar(data) == 4)
cbind(Year = data[idx], Score = ifelse(nchar(data[idx + 1]) == 3, data[idx + 1], NA))
#      Year   Score
# [1,] "2018" "5.5"
# [2,] "2016" "8.4"
# [3,] "2017" "6.6"
# [4,] "2018" NA   
# [5,] "2017" "5.5"
# [6,] "2009" "7.9"

, где используется nchar и ваша информация о длинах является ключевой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...