Объединение нескольких строк для каждой группы в одну при объединении только некоторых данных столбца в R - PullRequest
0 голосов
/ 19 октября 2019

У меня есть набор строк и столбцов данных постов и комментариев в Reddit, где строка представляет пост и его комментарий. Поскольку одно сообщение может содержать несколько комментариев, у меня есть строки с одинаковым идентификатором (идентификатором сообщения) и разными идентификаторами комментариев. Я хочу объединить строки с одинаковым идентификатором для одной строки и иметь все разные идентификаторы комментариев в столбце - «идентификатор комментария», разделенные запятыми. Но также, поскольку данные поста (заголовок, тело и т. Д.) Дублируются (как показано на прикрепленном изображении), мне не нужно, чтобы они объединялись как одно вхождение в строке.

! [Дубликаты строк] [1] 1

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

all_reddits <- all_posts_and_comments %>%
  group_by(id) %>%
  summarise(
    comment_id = paste(comment_id, collapse=","),
    comment_author = paste(comment_author, collapse = ","),
    comment_body = paste(comment_body, collapse = ","),
    comment_score = paste(comment_score, collapse = ","),
    comment_created_date = paste(comment_created_date, collapse = ","),
    comment_link = paste(comment_link, collapse=",")
  )

Я пробовал summarise_all () и summarise_at () R: dplyr, но продолжаю получать ошибки.

1 Ответ

0 голосов
/ 19 октября 2019

Я полагаю, что для решения вашей проблемы вы можете просто использовать сводное утверждение, например post_datapoint_xyz = first(post_datapoint_xyz), для каждого из столбцов post .

То, что также работает, будет просто включать все столбцы post в ваш список group_by:)
//: вы можете сделать это быстро, записав его как

all_reddits <- all_posts_and_comments %>%
  group_by_at(vars(starts_with('post_'))) %>%
  summarise(...)

summarise_all или summarise_at не поможет вам в этом, так как вы хотите применить две разные функции (вставка и первая) к двум различным группам переменных (комментарии и сообщения) и двум summarise_* функции не поддерживают это.
В этой ветке есть множество предложений, но они могут быть излишними для вашего варианта использования ...


ОднакоНа заметку: вы, возможно, не окажете себе большую услугу, просто объединяя каждый столбец комментариев по отдельности, поскольку при этом вы теряете связь между ними. (представьте себе один из комментариев, содержащий запятую, вы не сможете отменить это резюме.)

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

// update: если вы хотите сделать это, вы можете использовать функцию nest например:

all_reddits <- all_posts_and_comments %>%
  nest(starts_with('comment_'), .key = 'comments')

Если вы захотите удалить эти комментарии позже, функция unnest может помочь.

all_posts_and_comments.2 <- all_reddits %>%
  unnest(comments)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...