Определить структуру всех данных - PullRequest
0 голосов
/ 17 октября 2018

Скажем, у вас есть следующие данные:

data <- tibble::tribble(~Countries, ~States,   ~Continents,
                        "Country 1",      1L, "continent 1",
                        "Country 1",      2L, "continent 1",
                        "Country 1",      3L, "continent 1",
                        "Country 1",      4L, "continent 1",
                        "Country 2",      1L, "continent 1",
                        "Country 2",      2L, "continent 1",
                        "Country 2",      3L, "continent 1",
                        "Country 2",      4L, "continent 1",
                        "Country 3",      1L, "continent 1",
                        "Country 3",      2L, "continent 1",
                        "Country 3",      3L, "continent 1",
                        "Country 3",      4L, "continent 1",
                        "Country 1",      1L, "continent 2",
                        "Country 1",      2L, "continent 2",
                        "Country 1",      3L, "continent 2",
                        "Country 1",      4L, "continent 2",
                        "Country 2",      1L, "continent 2",
                        "Country 2",      2L, "continent 2",
                        "Country 2",      3L, "continent 2",
                        "Country 2",      4L, "continent 2",
                        "Country 3",      1L, "continent 2",
                        "Country 3",      2L, "continent 2",
                        "Country 3",      3L, "continent 2",
                        "Country 3",      4L, "continent 2")

Эти данные могут иметь много переменных разных форматов с разным уровнем детализации.Я хочу понять структуру данных, чтобы можно было сказать, что наивысшим уровнем данных является Континент с 2 значениями, следующим уровнем детализации являются округа с 3 значениями, а наименьшим уровнем являются состояния с 4 значениями в приведенных выше данных.

  1. Один грубый способ понять это может состоять в том, чтобы оставить переменную / переменные с наименьшим количеством различных значений слева, т.е. континенты, и значениями с наибольшим количеством различных значений, т.е. состояниямиправо на набор данных.

  2. Еще более простой способ разобраться в запутанных данных - это создать некую древовидную диаграмму и увидеть наименьшее количество гранулированных данных вверху, континенты, здесь и большинство гранулированных данных внизу.здесь, как листья / узлы.

В качестве первого разреза, мы можем использовать трюки, такие как показ одной из двух или более переменных сначала / вверху в случаях связей, когда числоуникальных значений одинаковы.

Если выполнение 2-го трудно, как мы можем сделать по крайней мере 1-й?... Может быть, оценивает различные значения каждой переменной в любых общих беспорядочных данных и затем упорядочивает переменные !Любой другой метод с сопровождающим кодом R был бы очень полезен.

Решение по первому пункту выглядело бы так:

data <- tibble::tribble( ~Continents,  ~Countries,   ~States,
                         "continent 1", "Country 1",   1L,
                         "continent 1", "Country 1",   2L,
                         "continent 1", "Country 1",   3L,
                         "continent 1", "Country 1",   4L,
                         "continent 1", "Country 2",   1L,
                         "continent 1", "Country 2",   2L,
                         "continent 1", "Country 2",   3L,
                         "continent 1", "Country 2",   4L,
                         "continent 1", "Country 3",   1L,
                         "continent 1", "Country 3",   2L,
                         "continent 1", "Country 3",   3L,
                         "continent 1", "Country 3",   4L,
                         "continent 2", "Country 1",   1L,
                         "continent 2", "Country 1",   2L,
                         "continent 2", "Country 1",   3L,
                         "continent 2", "Country 1",   4L,
                         "continent 2", "Country 2",   1L,
                         "continent 2", "Country 2",   2L,
                         "continent 2", "Country 2",   3L,
                         "continent 2", "Country 2",   4L,
                         "continent 2", "Country 3",   1L,
                         "continent 2", "Country 3",   2L,
                         "continent 2", "Country 3",   3L,
                         "continent 2", "Country 3",   4L)

1 Ответ

0 голосов
/ 17 октября 2018

Если я правильно понял, приведенный ниже код отвечает на ваши вопросы:

data[order(sapply(data, function(x) length(unique(x))))] # returns the data in the desired order

# simple function for plotting the 'tree'. 
plotTree <- function(lengths, names, space = 0.3){
  L    <- lengths[O <- order(lengths)]
  N    <- names[O]
  XMax <- max(L)
  YMax <- (length(L))
  plot(NULL, xlim = c(-XMax, XMax), ylim = c(-YMax, YMax), axes = F, xlab = "", ylab = "")
  for (i in 1:length(L)){
    rect(-L[i], YMax - 1 - i *  (space + 1), L[i], YMax - i *  (space + 1), col = i)
    text(0, YMax - 1/2 - i * (space + 1), N[i], col = if (i == 1) "white" else "black")
  }
}

# usage
plotTree(sapply(data, function(x) length(unique(x))), names(data), space = 0.3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...