Как динамически объединить строки в R? - PullRequest
0 голосов
/ 01 июня 2019

У меня есть следующий фрейм данных в R:

type,status,count
41,438421,512
41,438422,512
41,438429,269
74,440586,172
74,440590,217

Что я хочу сделать, это объединить строки и переставить данные. Мой желаемый результат показан ниже:

[41] = {["512"] = "438421, 438422", ["269"] = "438429",},
[74] = {["172"] = "440586", ["217"] = "440590",},

Строки должны быть объединены, чтобы столбец типа был уникальным. Затем следует добавить статус и количество, как показано выше.

Обратите внимание, что значения всех этих не известны, поэтому я не могу ссылаться на что-либо по значению (например, 438421). Фактический фрейм данных содержит более 100 000 строк, и все они имеют разные значения для всего, поэтому код решения должен работать независимо от того, какие значения используются выше.

Большое спасибо.

1 Ответ

3 голосов
/ 01 июня 2019

Вы можете сделать это с помощью dplyr ...

library(dplyr)

df %>% group_by(type, count) %>%
  summarise(status = paste(status, collapse = ", ")) %>%
  mutate(count = paste0('["', count, '"] = "', status, '"')) %>%
  group_by(type) %>%
  summarise(count = paste(count, collapse = ", ")) %>%
  mutate(type = paste0('[', type, '] = {', count, ',},')) %>%
  select(type)

  type                                                               
  <chr>                                                              
1 "[41] = {[\"269\"] = \"438429\", [\"512\"] = \"438421, 438422\",},"
2 "[74] = {[\"172\"] = \"440586\", [\"217\"] = \"440590\",},"       

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

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