2017-05-18 43 views
0

我是R新手。我想實現以下目標。 我有一個表如下。R爲最後X周動態轉置表

rowcounter ProductNumber YearNumber WeekNumber OrderedQuantity 
1 735001E083155 2016 2 10 
2 735001E083155 2016 3 20 
3 735001E083155 2016 3 10 
4 735001E083155 2016 4 60 
5 735001E083155 2016 4 50 
6 735001E083155 2016 5 20 

我要轉這個表,以便我能得到周的最後一個X號與產品的正確OrderQuantities列。所以一個例子是;

rowcounter ProductNumber YearNumber LastWeek Before2weeks Before3weeks 

等等...

訂購數量應該來過去一週,Before2weeks下等等... 我計劃切換X的東西約6至12

感謝您對如何使其儘可能動態化的迴應。

+0

請根據示例顯示的預期輸出顯示 – akrun

+0

這將創建大量冗餘數據..你爲什麼要這樣做? (可能有更好的方法) –

+0

這可能有助於https://www.r-statistics.com/tag/transpose/ –

回答

0

絕對推薦在tidyverse中使用dplyrtidyr,因爲它使重組數據非常好而自然。

我不太清楚你想如何處理你的重複記錄,所以我只是總結了訂單數量。

library(readr)          
library(dplyr)          
library(tidyr)          

d <- read_csv('data')  
#> Parsed with column specification: 
#> cols(
#> rowcounter = col_integer(), 
#> ProductNumber = col_character(), 
#> YearNumber = col_integer(), 
#> WeekNumber = col_integer(), 
#> OrderedQuantity = col_integer() 
#>) 

d %>%            
## Summarize to remove duplicates     
group_by(ProductNumber, YearNumber, WeekNumber) %>% 
summarize(OrderedQuantity=sum(OrderedQuantity)) %>% 
ungroup() %>%          

## Create header         
mutate(text=if_else(        
WeekNumber==1          
,'Last Week'          
,paste0("Before", WeekNumber,"Weeks"))    
) %>%            

## Remove unneeded columns 
## Use `filter` to remove unneeded rows        
select(-WeekNumber) %>%        

## Transpose          
spread(text, OrderedQuantity) 

#> # A tibble: 1 × 6 
#> ProductNumber YearNumber Before2Weeks Before3Weeks Before4Weeks 
#> *   <chr>  <int>  <int>  <int>  <int> 
#> 1 735001E083155  2016   10   30   110 
#> # ... with 1 more variables: Before5Weeks <int>