如何在R中将横截面数据转换为事务数据

如何在R中将横截面数据转换为事务数据,r,R,我有这样的横截面数据: **Type Component_ID** 767 801307-00 767 468K29-2 777 263BA101-2 777 964-0453-011 320 6740B050000 320 305-439-401-0 320 1386M56P03 320 2131M81G02 320 2290B020000 319 1588M89G03 319 305-136-803-0 319 9238M66P08 767 801307-00 767 468K29-2 3

我有这样的横截面数据:

**Type  Component_ID**
767 801307-00
767 468K29-2
777 263BA101-2
777 964-0453-011
320 6740B050000
320 305-439-401-0
320 1386M56P03
320 2131M81G02
320 2290B020000
319 1588M89G03
319 305-136-803-0
319 9238M66P08
767 801307-00
767 468K29-2
321 M20101-01
320 ACP2788AB04
Type    Component_ID                
767 801307-00   468K29-2            
777 263BA101-2  964-0453-011            
320 6740B050000 305-439-401-0   1386M56P03  2131M81G02  2290B020000
319 1588M89G03  305-136-803-0   9238M66P08      
767 801307-00   468K29-2            
321 M20101-01               
320 ACP2788AB04             
  Fleet_Type 020-739-0 020-807-0 071-50001-8102 121664-10 121666-17 1386M56P03 1460M52P03 1498M96G01 1520M27P07
1        310         0         0              0         0         0          0          0          0          0
2        319         0         0              0         0         0          0          1          0          0
3        320         0         0              0         1         2          1          0          1          0
4        321         0         0              0         0         0          0          0          0          1
我想将其转换为如下事务数据:

**Type  Component_ID**
767 801307-00
767 468K29-2
777 263BA101-2
777 964-0453-011
320 6740B050000
320 305-439-401-0
320 1386M56P03
320 2131M81G02
320 2290B020000
319 1588M89G03
319 305-136-803-0
319 9238M66P08
767 801307-00
767 468K29-2
321 M20101-01
320 ACP2788AB04
Type    Component_ID                
767 801307-00   468K29-2            
777 263BA101-2  964-0453-011            
320 6740B050000 305-439-401-0   1386M56P03  2131M81G02  2290B020000
319 1588M89G03  305-136-803-0   9238M66P08      
767 801307-00   468K29-2            
321 M20101-01               
320 ACP2788AB04             
  Fleet_Type 020-739-0 020-807-0 071-50001-8102 121664-10 121666-17 1386M56P03 1460M52P03 1498M96G01 1520M27P07
1        310         0         0              0         0         0          0          0          0          0
2        319         0         0              0         0         0          0          1          0          0
3        320         0         0              0         1         2          1          0          1          0
4        321         0         0              0         0         0          0          0          0          1
我试过从软件包中下载dcast

dcast(data1, Fleet_Type ~ Component_ID)
我的结果如下:

**Type  Component_ID**
767 801307-00
767 468K29-2
777 263BA101-2
777 964-0453-011
320 6740B050000
320 305-439-401-0
320 1386M56P03
320 2131M81G02
320 2290B020000
319 1588M89G03
319 305-136-803-0
319 9238M66P08
767 801307-00
767 468K29-2
321 M20101-01
320 ACP2788AB04
Type    Component_ID                
767 801307-00   468K29-2            
777 263BA101-2  964-0453-011            
320 6740B050000 305-439-401-0   1386M56P03  2131M81G02  2290B020000
319 1588M89G03  305-136-803-0   9238M66P08      
767 801307-00   468K29-2            
321 M20101-01               
320 ACP2788AB04             
  Fleet_Type 020-739-0 020-807-0 071-50001-8102 121664-10 121666-17 1386M56P03 1460M52P03 1498M96G01 1520M27P07
1        310         0         0              0         0         0          0          0          0          0
2        319         0         0              0         0         0          0          1          0          0
3        320         0         0              0         1         2          1          0          1          0
4        321         0         0              0         0         0          0          0          0          1
但是我不想要这样的计数,而是想要“宽”格式

我也试过了

> reshape(data1, idvar = "Fleet_Type", timevar = "Component_ID", direction = "wide")
   Fleet_Type
1         767
3         777
5         320
10        319
15        321
50        330
63        310
Warning messages:
1: In reshapeWide(data, idvar = idvar, timevar = timevar, varying = varying,  :
  multiple rows match for Component_ID=801307-00: first taken
2: In reshapeWide(data, idvar = idvar, timevar = timevar, varying = varying,  :
  multiple rows match for Component_ID=468K29-2: first taken
3: In reshapeWide(data, idvar = idvar, timevar = timevar, varying = varying,  :
  multiple rows match for Component_ID=9238M66P08: first taken
4: In reshapeWide(data, idvar = idvar, timevar = timevar, varying = varying,  :
但是,我只收到了错误消息


请在这方面帮助我

类型
拆分
df1
数据,并在其中循环并折叠
组件ID的值
。最后,使用
a1
中的值创建一个新的数据帧
df2

a1 <- lapply( with(df1, split(df1, Type)), function( x ) paste(x$Component_ID, collapse = ', ') )
df2 <- data.frame( Type = as.numeric(names(a1)), Component_ID = unlist(a1))
df2
#     Type                                                                 Component_ID
# 319  319                                        1588M89G03, 305-136-803-0, 9238M66P08
# 320  320 6740B050000, 305-439-401-0, 1386M56P03, 2131M81G02, 2290B020000, ACP2788AB04
# 321  321                                                                    M20101-01
# 767  767                                     801307-00, 468K29-2, 801307-00, 468K29-2
# 777  777                                                     263BA101-2, 964-0453-011

a1到目前为止您尝试了什么?这通常被称为从长到宽的转换,这里有许多类似的问题。@Stedy-好的,先生。我试试看。可能我不知道这个术语。我将检查从长到宽的转换。非常感谢你的帮助。这已经奏效了。是否可以在单独的列中打印组件标识,而不是使用逗号。我想在Excel中加载这个。不要逗号。如果您对此有任何想法,请提供帮助。请尝试使用
collapse='
,这将删除逗号。在单独的列中包含组件ID的问题是,组件ID的长度不相等。您可以将它们存储为字符向量或列表。我的答案是将它们存储为字符向量。谢谢,这已经奏效了。衷心感谢你的帮助