2

データを 3 つの列に基づいて 3 つの部分に分割しようとしており、さらに処理するためにデータを分散させたいと考えています。ただし、2 列を使用して分割すると、コードは機能します。3列では機能しません。これは、「複数の変数の反復測定をワイド形式に広げるにはどうすればよいですか?」の議論に基づいています。

ここに私のデータがあります:

structure(list(Zone = c("East", "East", "East", "East", "East", 
"East", "East", "West", "West", "West", "West", "West", "West", 
"West"), Fiscal.Year = c(2016, 2016, 2016, 2016, 2016, 2016, 
2017, 2016, 2016, 2016, 2017, 2017, 2018, 2018), Transaction.ID = c(132, 
133, 134, 135, 136, 137, 171, 171, 172, 173, 175, 176, 177, 178
), L.Rev = c(3, 0, 0, 1, 0, 0, 2, 1, 1, 2, 2, 1, 2, 1), L.Qty = c(3, 
0, 0, 1, 0, 0, 1, 1, 1, 2, 2, 1, 2, 1), A.Rev = c(0, 0, 0, 1, 
1, 1, 0, 0, 0, 0, 0, 1, 0, 0), A.Qty = c(0, 0, 0, 2, 2, 3, 0, 
0, 0, 0, 0, 3, 0, 0), I.Rev = c(4, 4, 4, 0, 1, 0, 3, 0, 0, 0, 
1, 0, 1, 1), I.Qty = c(2, 2, 2, 0, 1, 0, 3, 0, 0, 0, 1, 0, 1, 
1)), .Names = c("Zone", "Fiscal.Year", "Transaction.ID", "L.Rev", 
"L.Qty", "A.Rev", "A.Qty", "I.Rev", "I.Qty"), row.names = c(NA, 
14L), class = "data.frame")

動作するコードは次のとおりです。

Input_File %>%
gather(Rev_Qty,Value, L.Rev:I.Qty)  %>%
separate(Rev_Qty, into=c("L.A","Rev.Qty")) %>% 
split(.,list(.$Zone,.$Rev.Qty)) %>%  
#Ideally, I want three-way split--i.e. Fiscal.Year, Zone and Rev.Qty
purrr::map(~unite(.,LAType.Rev.Qty, L.A, Rev.Qty, sep = ".")) %>% 
purrr::map(~spread_(.,key_col = "LAType.Rev.Qty", value_col = "Value"))

これはうまく機能します。つまり、さらに処理するために使用できる長さ 4 のリストを取得します。

ただし、に基づいて 3 分割を適用すると、次のコードは機能しませんRev.QtyZoneFiscal.Year

Input_File %>%
gather(Rev_Qty,Value, L.Rev:I.Qty)  %>%
separate(Rev_Qty, into=c("L.A","Rev.Qty")) %>% 
#Now split the data based on zone, Rev vs. Qty and year--DOESN'T WORK
split(.,list(.$Zone,.$Rev.Qty,.$Fiscal.Year)) %>%
purrr::map(~unite(.,LAType.Rev.Qty, L.A, Rev.Qty, sep = ".")) %>% 
purrr::map(~spread_(.,key_col = "LAType.Rev.Qty", value_col = "Value"))

次のエラーが表示されます。

Error in enc2utf8(col_names(col_labels, sep = sep)) : 
  argumemt is not a character vector

unite().デバッグすると、を呼び出すとすぐに壊れるまで、コードがうまく実行されることがわかりましたspread_()

予想される出力:コードを まで実行するとunite()、長さ 12 のリストが得られることがわかります。これにより、期待される出力が明確になることを願っています。LAType.Rev.QtyValue

何が起こっているのか誰か助けてくれませんか?私は初心者で、何が起こっているのかわかりません。

4

1 に答える 1

2

データセットに存在しない組み合わせを削除する必要がありdrop=TRUEますsplit

Input_File %>%
      gather(Rev_Qty,Value, L.Rev:I.Qty)  %>%
      separate(Rev_Qty, into=c("L.A","Rev.Qty")) %>% 
      split(.,list(.$Zone,.$Rev.Qty,.$Fiscal.Year), drop = TRUE) %>%
      purrr::map(~unite(.,LAType.Rev.Qty, L.A, Rev.Qty, sep = ".")) %>% 
      purrr::map(~spread_(.,key_col = "LAType.Rev.Qty", value_col = "Value"))  
于 2017-01-07T09:00:12.283 に答える