modify - r ggplot legend values




Что может сделать R о беспорядочном формате данных? (4)

Использование data.table::fread :

x = '
+------------+------+------+----------+--------------------------+
|    Date    | Emp1 | Case | Priority | PriorityCountinLast7days |
+------------+------+------+----------+--------------------------+
| 2018-06-01 | A    | A1   |        0 |                        0 |
| 2018-06-03 | A    | A2   |        0 |                        1 |
| 2018-06-03 | A    | A3   |        0 |                        2 |
| 2018-06-03 | A    | A4   |        1 |                        1 |
| 2018-06-03 | A    | A5   |        2 |                        1 |
| 2018-06-04 | A    | A6   |        0 |                        3 |
| 2018-06-01 | B    | B1   |        0 |                        1 |
| 2018-06-02 | B    | B2   |        0 |                        2 |
| 2018-06-03 | B    | B3   |        0 |                        3 |
+------------+------+------+----------+--------------------------+
'

fread(gsub('\\+.+\\n' ,'', x, perl = T), drop=c(1,7))

#          Date Emp1 Case Priority PriorityCountinLast7days
# 1: 2018-06-01    A   A1        0                        0
# 2: 2018-06-03    A   A2        0                        1
# 3: 2018-06-03    A   A3        0                        2
# 4: 2018-06-03    A   A4        1                        1
# 5: 2018-06-03    A   A5        2                        1
# 6: 2018-06-04    A   A6        0                        3
# 7: 2018-06-01    B   B1        0                        1
# 8: 2018-06-02    B   B2        0                        2
# 9: 2018-06-03    B   B3        0                        3

Часть gsub удаляет горизонтальные правила. drop удаляет дополнительные столбцы, вызванные разделителями на концах строки.

Иногда я вижу данные, опубликованные в вопросе переполнения стека, отформатированные, как в этом вопросе . Это не первый раз, поэтому я решил задать вопрос об этом и ответить на вопрос, чтобы сделать опубликованные данные приемлемыми.

Я отправлю пример набора данных здесь, если вопрос будет удален.

+------------+------+------+----------+--------------------------+
|    Date    | Emp1 | Case | Priority | PriorityCountinLast7days |
+------------+------+------+----------+--------------------------+
| 2018-06-01 | A    | A1   |        0 |                        0 |
| 2018-06-03 | A    | A2   |        0 |                        1 |
| 2018-06-03 | A    | A3   |        0 |                        2 |
| 2018-06-03 | A    | A4   |        1 |                        1 |
| 2018-06-03 | A    | A5   |        2 |                        1 |
| 2018-06-04 | A    | A6   |        0 |                        3 |
| 2018-06-01 | B    | B1   |        0 |                        1 |
| 2018-06-02 | B    | B2   |        0 |                        2 |
| 2018-06-03 | B    | B3   |        0 |                        3 |
+------------+------+------+----------+--------------------------+

Как вы можете видеть, это неправильный способ публикации данных. Как писал пользователь в комментарии,

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

Я считаю, что все это говорит. Азбука хорошо спланирована, и потребовалось некоторое время и усилия, чтобы попытаться быть приятным, но результат не очень хорош.

Что может сделать код R, чтобы сделать эту таблицу пригодной для использования? Это потребует больших проблем?


Как было предложено, вы можете использовать dput, чтобы сохранить содержимое фрейма данных в файл, открыть файл в текстовом редакторе и вставить его содержимое. Пример набора данных mtcar, ограниченного первыми 10 строками:

 dput(mtcars %>% head(10), file = 'reproducible.txt') 

Содержимое tibble reproducible.txt можно использовать для создания tibble / tibble как показано ниже. В таком случае данные форматно считываются машиной, но на первый взгляд трудно понять его (без вставки в R).

 df <- structure(list(mpg = c(21, 21, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, 22.8, 19.2), cyl = c(6, 6, 4, 6, 8, 6, 8, 4, 4, 6), disp = c(160, 160, 108, 258, 360, 225, 360, 146.7, 140.8, 167.6), hp = c(110, 110, 93, 110, 175, 105, 245, 62, 95, 123), drat = c(3.9, 3.9, 3.85, 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3.92), wt = c(2.62, 2.875, 2.32, 3.215, 3.44, 3.46, 3.57, 3.19, 3.15, 3.44), qsec = c(16.46, 17.02, 18.61, 19.44, 17.02, 20.22, 15.84, 20, 22.9, 18.3), vs = c(0, 0, 1, 1, 0, 1, 0, 1, 1, 1), am = c(1, 1, 1, 0, 0, 0, 0, 0, 0, 0), gear = c(4, 4, 4, 3, 3, 3, 3, 4, 4, 4), carb = c(4, 4, 1, 1, 2, 1, 4, 2, 2, 4)), .Names = c("mpg", "cyl", "disp", "hp", "drat", "wt", "qsec", "vs", "am", "gear", "carb"), row.names = c("Mazda RX4", "Mazda RX4 Wag", "Datsun 710", "Hornet 4 Drive", "Hornet Sportabout", "Valiant", "Duster 360", "Merc 240D", "Merc 230", "Merc 280"), class = "data.frame") 

Ну, об этом конкретном наборе данных я использовал функцию импорта в RStudio, но я сделал еще один шаг заранее.

  1. Скопируйте набор данных в файл «Блокнот».
  2. Заменить все | символы с ,
  3. Import файл «Блокнот», используя read.csv в RStudio, используя этот код (отдельные столбцы по , ).

Но, если вы имеете в виду использование R, чтобы полностью понять его за один шаг, тогда я понятия не имею.


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

Я не сталкивался с подобными вещами в дикой природе, но мне пришлось придумать еще несколько примеров, которые, как я думал, могли бы существовать.

dput(mtcars  %>% head(10), file = 'reproducible.txt')

Моя функция

df <- structure(list(mpg = c(21, 21, 22.8, 21.4, 18.7, 18.1, 14.3,
24.4, 22.8, 19.2), cyl = c(6, 6, 4, 6, 8, 6, 8, 4, 4, 6), disp = c(160,
160, 108, 258, 360, 225, 360, 146.7, 140.8, 167.6), hp = c(110,
110, 93, 110, 175, 105, 245, 62, 95, 123), drat = c(3.9, 3.9,
3.85, 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3.92), wt = c(2.62,
2.875, 2.32, 3.215, 3.44, 3.46, 3.57, 3.19, 3.15, 3.44), qsec = c(16.46,
17.02, 18.61, 19.44, 17.02, 20.22, 15.84, 20, 22.9, 18.3), vs = c(0,
0, 1, 1, 0, 1, 0, 1, 1, 1), am = c(1, 1, 1, 0, 0, 0, 0, 0, 0,
0), gear = c(4, 4, 4, 3, 3, 3, 3, 4, 4, 4), carb = c(4, 4, 1,
1, 2, 1, 4, 2, 2, 4)), .Names = c("mpg", "cyl", "disp", "hp",
"drat", "wt", "qsec", "vs", "am", "gear", "carb"), row.names = c("Mazda RX4",
"Mazda RX4 Wag", "Datsun 710", "Hornet 4 Drive", "Hornet Sportabout",
"Valiant", "Duster 360", "Merc 240D", "Merc 230", "Merc 280"), class = "data.frame")




dataframe