如何在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的长度不相等。您可以将它们存储为字符向量或列表。我的答案是将它们存储为字符向量。谢谢,这已经奏效了。衷心感谢你的帮助