在 for 回圈中使用時,我無法讓 r 的 dplyr::arrange() 正確排序。我發現很多帖子都在討論這個問題(比如ex.1使用 .by_group=TRUE 并使用 desc() 更好,ex.2使用串列,ex.3使用 filter_all() 和 %in%)。然而,我仍然有點難以理解為什么當我直接使用列名時我可以讓排列()作業,但當我在向量中參考它的索引位置時卻不能,稍后將在回圈中使用幫助從更大的資料框中提取資料。
這是一個可重現的玩具資料來演示:
set.seed(1)
toy <- data.frame(a=rep(sample(letters[1:5], 4, TRUE)), tf=sample(c("T","F"), 100, TRUE), n1=sample(1:100, 100, TRUE), n2=1:100)
get_it <- colnames(toy)[3:4]
到目前為止,我的初始方法適用于 select() 部分的索引向量,但即使使用 .by_group 選項也無法對arrange() 進行排序。我也嘗試添加 dplyr::arrange() 但沒有改變。
j=1 # pretending this is the 1st pass in the loop
toy %>%
select(a, tf, get_it[j]) %>%
group_by(a) %>%
arrange(desc(get_it[j]), .by_group=TRUE)
a tf n1
<chr> <chr> <int>
a T 21
a T 17
a F 87
a T 90
a T 64
示例輸出被截斷
但是,當我在排列()中為列的相同名稱切換索引向量時,我得到了預期的排序結果(選擇仍然可以正常作業):
j=1 # pretending this is the 1st pass through the loop
toy %>%
select(a, tf, get_it[j]) %>%
group_by(a) %>%
arrange(desc(n1), .by_group=TRUE)
a tf n1
<chr> <chr> <int>
a F 99
a F 98
a F 96
a F 95
a T 93
示例輸出被截斷
為什么第二個版本有效,但第一個無效?我應該改變什么,以便我可以通過許多列回圈?
提前致謝!我很感激你的時間!
(稍作修改以糾正錯字。)
uj5u.com熱心網友回復:
這是“使用 dplyr 編程”,.data用于通過字串參考列:
toy %>%
select(a, tf, get_it[j]) %>%
group_by(a) %>%
arrange(desc(.data[[ get_it[j] ]]), .by_group=TRUE)
# # A tibble: 100 x 3
# # Groups: a [3]
# a tf n1
# <chr> <chr> <int>
# 1 a F 99
# 2 a F 98
# 3 a F 96
# 4 a F 95
# 5 a T 93
# 6 a T 92
# 7 a T 92
# 8 a T 90
# 9 a F 87
# 10 a F 86
# # ... with 90 more rows
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/471920.html
上一篇:未找到范圍,適用于Google表格的GoogleApps腳本
下一篇:按鍵值排序物件0按數字大小
