是否可以從across函式中獲取新列的名稱?
例如
data.frame(a=1) %>%
mutate(across(c(b=a, c=a), function(i) if("new column name"=="b") a 1 else a 0.5))
預期結果:
#> a b c
#> 1 1 2 1.5
由reprex 包( v2.0.0 )于 2021 年 12 月 9 日創建
我試圖使用,cur_column()但它的回傳值似乎a在這種情況下。
我很抱歉這個例子太簡單了,無法通過其他方式實作預期的結果,但我的實際代碼是一個難以提供的大型嵌套資料幀。
uj5u.com熱心網友回復:
有趣的問題。似乎因為您正在定義b并且c在across呼叫中,它們無法通過cur_column().
data.frame(a=1) %>%
mutate(across(c(b=a, c=a), function(i) print(cur_column())))
#> [1] "a"
#> [1] "a"
如果它們已經在data.frame. tibble()在這里使用,以便我可以a在建構式中參考。
tibble(a=1, b=a, c=a) %>%
mutate(across(-a, ~ if (cur_column() == "b") .x 1 else .x 0.5))
#> # A tibble: 1 × 3
#> a b c
#> <dbl> <dbl> <dbl>
#> 1 1 2 1.5
而同樣的作業,即使你是在同一個mutate()電話,只是確保定義b和c之前across()。
data.frame(a=1) %>%
mutate(across(c(b=a, c=a), ~.x),
across(-a, ~ if (cur_column() == "b") .x 1 else .x 0.5))
#> a b c
#> 1 1 2 1.5
我相信這是因為across在rhs( a) 上作業并僅在應用了函式 in 后才將值分配給lhs( b) across()。我不確定這是預期的行為(雖然它看起來確實是正確的),我實際上不知道,所以會打開一個 GitHub 問題,因為我認為這是一個有趣的例子!
uj5u.com熱心網友回復:
你可以這是一個例子:
my_df <- data.frame("name" = c("John","mark","bell","elsa"),
"test" = c("apple","fries apple","peach","bread"),
stringsAsFactors = FALSE)
my_df <- my_df %>% group_by(name) %>% mutate(Price = cur_group_id()) %>% filter(Price > 2)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/377742.html
上一篇:如何更改未分組資料中的分組資料
