Почему у меня возникают проблемы с разделением строк в кадре данных? - PullRequest
0 голосов
/ 06 ноября 2018

У меня проблема с разделением строк в кадре данных, в котором я работаю.

В моем фрейме данных есть столбец officialIndices, по которому я хочу разделить строки. В этом столбце хранится список чисел, действующих как индексы, указывающие, какие строки имеют одинаковые данные. Например: индексы 2: 3 означают, что строки 2: 3 имеют одинаковые данные.

Вот код, с которым я работаю.

offices_list <- data_google$offices
offices_JSON <- toJSON(offices_list)
offices_from_JSON <-
  separate_rows(fromJSON(offices_JSON), officialIndices, convert = TRUE)

Вот как выглядит мой кадр office_list This is what my offices_list frame looks like

Вот как это выглядит после того, как я пытаюсь разделить строки After separating the rows

Мой код работает нормально, когда он имеет индексы 2: 3, поскольку есть разница 1. Однако в индексах, таких как 7:10, он разделяет строки как 7 и 10 вместо 7, 8, 9, 10, что Я хочу, чтобы это было сделано. Как бы я получить мой код для разделения строк, как это?

Вывод dput (head (office_list))

structure(list(position = c("President of the United States", 
"Vice-President of the United States", "United States Senate", 
"Governor", "Mayor", "Auditor"), divisionId = c("ocd-division/country:us", 
"ocd-division/country:us", "ocd-division/country:us/state:or", 
"ocd-division/country:us/state:or", "ocd-division/country:us/state:or/place:portland", 
"ocd-division/country:us/state:or/place:portland"), levels = list(
    "country", "country", "country", "administrativeArea1", NULL, 
    NULL), roles = list(c("headOfState", "headOfGovernment"), 
    "deputyHeadOfGovernment", "legislatorUpperBody", "headOfGovernment", 
    NULL, NULL), officialIndices = list(0L, 1L, 2:3, 4L, 5L, 
    6L)), row.names = c(NA, 6L), class = "data.frame")

1 Ответ

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

Это должно работать. Я ожидаю, что это будет работать и для дальнейших строк, так как я тестировал диапазоны больше двух в officialIndices.

Сначала я извлек начальную и конечную строки и использовал их различие, чтобы определить, сколько строк необходимо. Затем tidyr::uncount() добавит столько копий.

library(dplyr); library(tidyr)
data_sep <- data %>%
  separate(officialIndices, into = c("start", "end"), sep = ":") %>%
  # Use 1 row, and more if "end" is defined and larger than "start"
  mutate(rows = 1 + if_else(is.na(end), 0, as.numeric(end) - as.numeric(start))) %>%
  uncount(rows)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...