[英]Splitting based on multiple columns and then applying spread() in R
我試圖根據 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 的列表,可用於進一步處理。
但是,當我基於Rev.Qty
應用三向拆分時,以下代碼不起作用; Zone
和Fiscal.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.Qty
和Value
列上應用 spread 后,預期輸出將是這個列表。 我希望這能澄清預期的輸出。
有人可以幫助我這是怎么回事嗎? 我是初學者,我不知道發生了什么。
我們需要在split
drop=TRUE
中刪除數據集中不存在的組合
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"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.