使用 R 重塑数据框在新列中为每个唯一类别分类

Reshape dataframe place categorical in new column for each unique category using R

假设我有以下数据框

 test <- data.frame(items = c("itemA", "itemB","itemC", "itemD"),
          ID = c("1","2","1","3"),
          time = c("11","12","11","13"))

> test
     items ID time
   1 itemA  1   11
   2 itemB  2   12
   3 itemC  1   11
   4 itemD  3   13

我正在尝试重塑它,使其在 ID 上折叠。对于每个唯一的项目,应该创建一列,并且适当的项目应该放在每一列中,这样在任何 1 项目列中只有 1 项目。即 itemA 不应与 itemB 在同一列中。

这是我正在寻找的示例:

> test
     ID time Item1   Item2   Item3    Item4
   1 1   11   itemA    -      itemC    -
   2 2   12    -      itemB    -       -
   4 3   13    -        -      -      itemD  

感谢任何帮助!

我们可以使用tidyverse创建一个序列列然后spread到'wide'格式

library(tidyverse)
test %>%      
   mutate(rn = paste0("Item", row_number())) %>% 
   spread(rn, items)
# ID time Item1 Item2 Item3 Item4
#1  1   11 itemA  <NA> itemC  <NA>
#2  2   12  <NA> itemB  <NA>  <NA>
#3  3   13  <NA>  <NA>  <NA> itemD

data.table 通常更快... 如果您可以忍受略有不同的列名,请试一试

library( data.table )
dcast( setDT( test ), ID + time ~ items, value.var = "items" )

#    ID time itemA itemB itemC itemD
# 1:  1   11 itemA  <NA> itemC  <NA>
# 2:  2   12  <NA> itemB  <NA>  <NA>
# 3:  3   13  <NA>  <NA>  <NA> itemD