Необходимо собрать значения из разных строк и объединить в одну строку - PullRequest
3 голосов
/ 18 июня 2020

Я новичок в R, и пока у меня все хорошо, но сейчас мне нужно сделать что-то немного сложное, и я не могу заставить его работать. У меня есть набор данных, подобный следующему (в дальнейшем я назову это df):

df <- tribble(~name,             ~word,             ~N,
              "brandon",         "hello",            3,
               "john",           "test",             5,
               "jim",            "hello",            2,
               "brandon",        "goodbye",          2,
               "brandon",        "test",             1,
               "jim",            "goodbye",          4)

пока что у меня происходит что-то вроде этого:

temp_df <- df %>% mutate(
                     "hello" = ifelse(word == "hello", N, 0),
                     "goodbye" = ifelse(word == "goodbye", N, 0),
                     "test" = ifelse(word == "test", N, 0)
                  )

который что-то создает вот так:

name            hello           goodbye        test        word         N
brandon         3               0              0           hello        3
john            0               0              5           test         5
jim             2               0              0           hello        2
brandon         0               2              0           goodbye      2
brandon         0               0              1           test         1
jim             0               4              0           goodbye      4

но мне нужно, чтобы df выглядел так:

name            hello           goodbye        test
brandon         3               2              1
john            0               0              5
jim             2               4              0

Я знаю, как выбрать () важные данные, когда я здесь закончу, но я просто не знаю, как собрать все данные для каждого имени в одну строку. Пожалуйста, остановитесь :)

PS, если у кого-то есть предложение по лучшему названию, которое будет оценено

Ответы [ 2 ]

3 голосов
/ 18 июня 2020

Фрейм данных

df <- tribble(~name,             ~word,             ~N,
              "brandon",         "hello",            3,
               "john",           "test",             5,
               "jim",            "hello",            2,
               "brandon",        "goodbye",          2,
               "brandon",        "test",             1,
               "jim",            "goodbye",          4)

Решение

library(dplyr) 
  df %>%
  pivot_wider(id_cols="name", names_from="word", values_from="N", 
  values_fill=0)

pivot_wider() «расширяет» данные, увеличивая количество столбцов и уменьшение количества строк. Обратное преобразование: pivot_longer().

Функция help() и ? оператор справки в R обеспечивают доступ к страницам документации для функций R, наборов данных и других объектов, как для пакетов в стандарте R и для дополнительных пакетов. Например, help(pivot_wider) или ?pivot_wider.

Вывод

    name    hello   test    goodbye
    brandon 3       1       2   
    john    0       5       0   
    jim     2       0       4   
3 голосов
/ 18 июня 2020

Использование dplyr:

df %>%
  pivot_wider(id_cols="name", names_from="word", values_from="N", values_fill=0)

дает

# A tibble: 3 x 4
  name    hello  test goodbye
  <chr>   <dbl> <dbl>   <dbl>
1 brandon     3     1       2
2 john        0     5       0
3 jim         2     0       4
...