0

我正在处理一些库存订单数据,并且对我怀疑需要转置的内容有疑问。数据框列出了每个客户的每个项目的每个供应位置的数量,但我需要它为每个供应位置有一个单独的行

我看起来像这样 - 每个编号的列都是一个供应位置

1. Customer Cust.location Product 116 117 41 25 81 Total.Order
2. ABC Tap 123 5 3 0 2 1 11 
3. ABC Tap 456 0 1 4 0 2 7
4. DEF Kar 123 1 0 0 3 4 8

我需要的是

1. Customer  Cust.Location  Product  Source  Total  
2. ABC       Tap            123      116     5   
3. ABC       Tap            123      117     3  
4. ABC       Tap            123      25      2  
5. ABC       Tap            123      81      1  
6. ABC       Tap            456      117     1  
7. ABC       Tap            456      41      4  
8. ABC       Tap            456      81      2  
9. DEF       Kar            123      116     1  
10.DEF       Kar            123      25      3  
11.DEF       Kar            123      81      4

很抱歉布局不佳 - 第一次在这里发帖。
不太担心处理 0 行,所以如果你有一个保留它们的解决方案,没关系

4

2 回答 2

2

@alexwhan 提到的基本重塑方法非常相似:

dat <- read.table(text="Customer Cust.location Product 116 117 41 25 81 Total.Order
ABC Tap 123 5 3 0 2 1 11 
ABC Tap 456 0 1 4 0 2 7
DEF Kar 123 1 0 0 3 4 8",header=TRUE)

reshape(
  dat[,-9],
  idvar=c("Customer","Cust.location", "Product"),
  varying=4:8,
  v.names="Total",
  timevar="Source",
  times=names(dat[4:8]),
  direction="long"
)
于 2013-05-28T05:10:09.303 回答
2

这是从宽格式到长格式的经典重塑。包中的melt功能reshape2是我喜欢的方式,尽管您可以使用reshape基础 R 中的功能。如果您data.framedat

library(reshape2)
dat.m <- melt(dat[,-9], id.vars= c("Customer", "Cust.location", "Product"),
              variable.name="Source", value.name="Total")

我删除了Total.Order( dat[,-9]) 列,因为您似乎不需要它。

#    Customer Cust.location Product Source Total
# 1       ABC           Tap     123    116     5
# 2       ABC           Tap     456    116     0
# 3       DEF           Kar     123    116     1
# 4       ABC           Tap     123    117     3
# 5       ABC           Tap     456    117     1
# 6       DEF           Kar     123    117     0
# 7       ABC           Tap     123     41     0
# 8       ABC           Tap     456     41     4
# 9       DEF           Kar     123     41     0
# 10      ABC           Tap     123     25     2
# 11      ABC           Tap     456     25     0
# 12      DEF           Kar     123     25     3
# 13      ABC           Tap     123     81     1
# 14      ABC           Tap     456     81     2
# 15      DEF           Kar     123     81     4
于 2013-05-28T01:11:31.120 回答