Преобразование таблицы из WIDE в LONG (поворот) с повторяющимися строками (tidyr) - PullRequest
0 голосов
/ 25 мая 2020

Есть длинная таблица, которую нужно преобразовать в широкую, но есть повторяющиеся строки в соответствии с переменной псевдоним

df_long <- data.frame(
    pseudonym = c("a", "a", "a", "b", "c", "c"),
    score = c(0.3 ,0.7, 0.2, 0.4, 0.9 , 0.8),
    topic = c("car", "tree", "hill", "tree", "car", "hill"))
> df_long
  pseudonym score topic
1         a   0.3   car
2         a   0.7  tree
3         a   0.2  hill
4         b   0.4  tree
5         c   0.9   car
6         c   0.8  hill

Я пытался преобразовать эту таблицу в следующей широкой таблице:

df_wide <- data.frame(
  pseudonym = c("a", "b", "c"),
  car = c(0.3 , NA, 0.9),
  hill = c(0.2, NA, 0.8),
  tree = c(0.7, 0.4, NA))
> df_wide
  pseudonym car hill tree
1         a 0.3  0.2  0.7
2         b  NA   NA  0.4
3         c 0.9  0.8   NA

Код

df_long %>%
  spread(key = topic, value = score)

выдает сообщение Ошибка: каждая строка вывода должна быть идентифицирована уникальной комбинацией клавиш . Ключи общие для 137108 строк:

Еще одна попытка с pivot_wider ()

df_long %>% 
  pivot_wider(names_from = topic, values_from = score)

приводит к Предупреждение: значения в score не идентифицируются однозначно; вывод будет содержать столбцы списка. и столбцы списка.

Я думаю, мне нужно правильно установить другой параметр pivot_wider () или объединить его с группировкой. Хорошее решение будет очень кстати. Спасибо.

1 Ответ

0 голосов
/ 25 мая 2020

При использовании pivot_wider обычно необходимо указать names_from, values_from и id_cols. Мне кажется, это работает.

pivot_wider(df_long, names_from = "topic", values_from = "score", id_cols = "pseudonym")

...