R 我想将我的数据从长格式更改为宽格式,但存在各种变量

R 我想将我的数据从长格式更改为宽格式,但存在各种变量,r,R,我当前的数据格式如下 ID ID_2 Item ID Final Amount 001 111 1111 34623 001 111 1112 42567 001 112 1113 1254 001 112 1114 45237 001 112 1115 42913 001 112 1116 28117 001 113 1117 10312 008 222 1118 27367 008 222 1119 24714 008 223 1

我当前的数据格式如下

ID  ID_2    Item ID Final Amount
001 111 1111    34623
001 111 1112    42567
001 112 1113    1254
001 112 1114    45237
001 112 1115    42913
001 112 1116    28117
001 113 1117    10312
008 222 1118    27367
008 222 1119    24714
008 223 1120    30949
011 333 1121    49529
012 444 1122    29762
012 444 1123    2743
012 444 1124    21357
012 444 1125    16256
012 444 1126    18376
017 555 1127    7877
017 555 1128    10684
017 555 1129    25281
但我希望它是一种矩阵

ID  ID_2    Item_1  Item_2  Item_3  Item_4  Item_5
1   111 34623   42567           
1   112 1254    45237   42913   28117   
1   113 10312               
8   222 27367   24714           
8   223 30949               
11  333 49529               
12  444 29762   2743    21357   16256   18376
17  555 7877    10684   25281       

有人能帮我吗?

我们可以通过“ID”,“ID_2”创建一个序列列来实现这一点,使用
dcast
from
data.table

library(data.table)
dcast(setDT(df1), ID + ID_2 ~paste0("Item", rowid(ID, ID_2)), value.var = "FinalAmount")
#    ID ID_2 Item1 Item2 Item3 Item4 Item5
#1:  1  111 34623 42567    NA    NA    NA
#2:  1  112  1254 45237 42913 28117    NA
#3:  1  113 10312    NA    NA    NA    NA
#4:  8  222 27367 24714    NA    NA    NA
#5:  8  223 30949    NA    NA    NA    NA
#6: 11  333 49529    NA    NA    NA    NA
#7: 12  444 29762  2743 21357 16256 18376
#8: 17  555  7877 10684 25281    NA    NA

也可以使用
tidyverse

library(tidyverse)
df1 %>% 
   group_by(ID, ID_2) %>% 
   mutate(Seq = paste0("Item", row_number())) %>%
   select(-ItemID) %>%
   spread(Seq, FinalAmount)
# A tibble: 8 x 7
# Groups: ID, ID_2 [8]
#     ID  ID_2 Item1 Item2 Item3 Item4 Item5
#* <int> <int> <int> <int> <int> <int> <int>
#1     1   111 34623 42567    NA    NA    NA
#2     1   112  1254 45237 42913 28117    NA
#3     1   113 10312    NA    NA    NA    NA
#4     8   222 27367 24714    NA    NA    NA
#5     8   223 30949    NA    NA    NA    NA
#6    11   333 49529    NA    NA    NA    NA
#7    12   444 29762  2743 21357 16256 18376
#8    17   555  7877 10684 25281    NA    NA
库(tidyverse)
df1%>%
分组人(ID,ID 2)%>%
突变(Seq=paste0(“项”,行号())%>%
选择(-ItemID)%%>%
价差(序号、最终金额)
#一个tibble:8x7
#分组:ID,ID_2[8]
#ID_2项目1项目2项目3项目4项目5
#*       
#111134623 42567 NA NA NA NA
#211212544523742913 28117北美
#31111310312不适用不适用不适用不适用不适用
#4 8 222 27367 24714 NA NA NA NA
#5 8 223 30949纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳纳
#611333349529NA NA NA NA
#7    12   444 29762  2743 21357 16256 18376
#81755578771068425281纳
数据
df1无需在
rowid
imo中包含
ID
;使用dcast(setDT(df1),ID+ID\u 2~rowid(ID\u 2,前缀='Item'),value.var=“FinalAmount”)
的工作原理与well@Jaap它可以工作,但在完整数据中可能需要它我的数据超过9L行,因此它给出了一个错误:无法分配大小为58.4 Gb的向量。@dineshkhemani这是因为您的系统没有执行此操作的内存。如果内存是一个问题,您可能必须在服务器上执行此操作。我没有在服务器上执行此操作的选项。您能推荐一种可以在系统内存上执行的解决方案吗?感谢在base R中,您可以在创建如下项计数变量后使用
重塑
df1$times错误:无法分配大小为2.9 Gb的向量
df1 <- structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 8L, 8L, 8L, 
11L, 12L, 12L, 12L, 12L, 12L, 17L, 17L, 17L), ID_2 = c(111L, 
111L, 112L, 112L, 112L, 112L, 113L, 222L, 222L, 223L, 333L, 444L, 
444L, 444L, 444L, 444L, 555L, 555L, 555L), ItemID = 1111:1129, 
FinalAmount = c(34623L, 42567L, 1254L, 45237L, 42913L, 28117L, 
10312L, 27367L, 24714L, 30949L, 49529L, 29762L, 2743L, 21357L, 
16256L, 18376L, 7877L, 10684L, 25281L)), .Names = c("ID", 
"ID_2", "ItemID", "FinalAmount"), class = "data.frame", row.names = c(NA, 
 -19L))