R: Как переставить избыточные значения в столбцах, чтобы было меньше строк и больше столбцов - PullRequest
0 голосов
/ 29 апреля 2020

У меня в настоящее время есть таблица, которая выглядит следующим образом:

Изображение 1 - Текущая таблица

Есть 3 набора повторяющихся сегментов 83, 16, 24. Я хочу изменить таблицу так, чтобы каждое из этих значений существовало только один раз, а не 3 раза. Это добавит больше столбцов справа для каждого из значений в ColB.

Вот требуемая таблица:

Рисунок 2 - Цель

Каждое из значений в исходном ColA указано только один раз, а не 3 раза. И затем исходные значения ColB, которые соответствуют избыточным значениям ColA, организуются в ColB1, ColB2 и ColB3.

Мне интересно, есть ли у кого-нибудь идеи о том, как go переставить исходную таблицу, чтобы она стала желаемой таблицей на втором рисунке? Теперь достаточно просто переставить вручную, но я хочу иметь дело с тысячами значений. Я пробовал pivot_wider и распространял, но не смог заставить его работать, и не смог найти решение на StackOverflow. Если у кого-нибудь есть какой-либо совет относительно направления, по которому следует идти, это будет оценено, и если что-то неясно в этом вопросе, пожалуйста, дайте мне знать!

Кроме того, на случай, если кому-то будет интересно, почему я добавил тег генома, это потому, что значения colA на самом деле являются позициями генома, а значения colB - частотами аллелей.

1 Ответ

0 голосов
/ 29 апреля 2020

Вы на правильном пути с pivot_wider.

Вот что я сделал, чтобы повторить ваши фотографии. Примечание: я добавил столбец «Allele» для обозначения разделов. В идеале это должно исходить из вашего исходного набора данных.

    # data
data <- tribble(
  ~ColA, ~ColB, ~Allele,
  "83", 0.5, "1",
  "16", 0.3, "1",
  "24", 0.2, "1",
  "83", 0.5, "2",
  "16", 0.1, "2",
  "24", 0.8, "2",
  "83", 0.6, "3",
  "16", 0.5, "3",
  "24", 0.6, "3",
)

# pivot to column based
new_data <- data %>% 
  pivot_wider(names_prefix = "ColB", names_from = Allele, values_from = ColB)
...