2017-05-18 6 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 

この表を転置して、製品の適切なOrderQuantitiesを持つ列として最後のX番号を取得できるようにしたいとします。したがって例があります。

rowcounter ProductNumber YearNumber LastWeek Before2weeks Before3weeks 

のように...

注文数量がLastweek、Before2weeksの下に来るべきのように... 私は約6にXの何かをトグルする予定です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> 
関連する問題