#r
Вопрос:
У меня возникли проблемы с преобразованием определенного набора данных из длинного в широкий.
col1 col2 ID 55. animal. bear shape. circle ID 67. animal. cat shape. square
I want it to look like ID. animal. shape 55. bear. circle 67. cat. square
Извините, если на этот вопрос уже был дан ответ, я просто не могу этого понять.
Ответ №1:
Нам нужно создать последовательность с помощью ‘col1’, прежде чем выполнять pivot_wider
library(dplyr) library(tidyr) library(data.table) df1 %gt;% mutate(rn = rowid(col1)) %gt;% pivot_wider(names_from = col1, values_from = col2) %gt;% select(-rn) %gt;% type.convert(as.is = TRUE)
-выход
# A tibble: 2 × 3 ID animal. shape. lt;dblgt; lt;chrgt; lt;chrgt; 1 55 bear circle 2 67 cat square
данные
df1 lt;- structure(list(col1 = c("ID", "animal.", "shape.", "ID", "animal.", "shape."), col2 = c("55.", "bear", "circle", "67.", "cat", "square" )), class = "data.frame", row.names = c(NA, -6L))
Комментарии:
1. Большое вам спасибо! Я понял после того, как опубликовал вопрос, что некоторые идентификаторы имеют несколько наблюдений в других столбцах. Как я могу сделать так, чтобы был еще один столбец под названием «animal2», который просто возвращает NA, если есть только одно наблюдение? Я могу опубликовать новый вопрос с примером, если это необходимо!
2. @alex можете ли вы опубликовать новый вопрос. Спасибо
3. да, я только что это сделал, спасибо!
4. @alex Я опубликовал там решение. Просьба проверить
5. Я его не вижу, там написано, что он был удален
Ответ №2:
Еще одно решение:
library(tidyverse) df lt;- data.frame( stringsAsFactors = FALSE, col1 = c("ID","animal.", "shape.","ID","animal.","shape."), col2 = c("55.", "bear", "circle", "67.", "cat", "square") ) df %gt;% pivot_wider(names_from = col1, values_from = col2, values_fn = list) %gt;% unnest(cols = c(ID, animal., shape.)) #gt; # A tibble: 2 × 3 #gt; ID animal. shape. #gt; lt;chrgt; lt;chrgt; lt;chrgt; #gt; 1 55. bear circle #gt; 2 67. cat square