Использование поворота шире в R

#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