我在一個資料框中有大量的年度資料,這些資料只會變得更大。我想組織它,根據年份對列進行分組,這包含在列名稱中。
基礎資料:
dput(dat)
structure(list(id = 1:2, quantity = 3:4, avg_2002 = 5:6, avg_2003 = 7:8,
avg_2020 = 9:10, rev_2002 = c(15L, 24L), rev_2003 = c(21L,
32L), rev_2020 = c(27L, 40L)), row.names = c(NA, -2L), class = "data.frame")
我想這樣做的是所有的列著,說,“2002”,在他們組織在一起,其次是“2003”列等等......我知道,relocate在dplyr是一個很好的辦法做到這一點,所以我做了以下事情:
dat <- tibble(dat)
dat <- dat %>%
relocate(grep("2002$", colnames(dat), value = TRUE),
.before = grep("2003$", colnames(dat), value = TRUE)) %>%
relocate(grep("2003$", colnames(dat), value = TRUE),
.after = grep("2002$", colnames(dat), value = TRUE))
這為我的玩具資料集產生了所需的結果:
id quantity avg_2002 rev_2002 avg_2003 rev_2003 avg_2020 rev_2020
<int> <int> <int> <int> <int> <int> <int> <int>
1 1 3 5 15 7 21 9 27
2 2 4 6 24 8 32 10 40
我的問題是這樣的:
- 我如何概括上面的代碼,以便我不必繼續添加
relocate令人討厭的陳述句? - 有沒有更好的方法來完成這項任務而不使用
dplyr::relocate?
任何建議都非常感謝。謝謝!
uj5u.com熱心網友回復:
我們可以使用select- 提取列名的數字部分,order并使用該索引select重新排序
library(dplyr)
dat %>%
select(id, quantity, order(readr::parse_number(names(.)[-(1:2)])) 2)
-輸出
# A tibble: 2 × 8
id quantity avg_2002 rev_2002 avg_2003 rev_2003 avg_2020 rev_2020
<int> <int> <int> <int> <int> <int> <int> <int>
1 1 3 5 15 7 21 9 27
2 2 4 6 24 8 32 10 40
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/360305.html
上一篇:將資料型別從字符更改為數字
