[英]How to map custom function across multiple variables
我寫了一個 function 來確定對於給定變量,組中的值是否不相同,並創建一個新變量,如果有差異則提供變量的名稱,如果沒有差異則提供 NA。
x <- c(2,4,5,5,6,2,3)
y <- c(5,5,2,3,6,1,8)
z <- c(5,2,4,1,3,5,1)
xy <- tibble(x, y, z)
diff_var <- function(a, b) {
a %>%
transmute("{{c}}" := n_distinct({{c}})) %>%
ungroup() %>%
select({{c}}) %>%
imap_dfc(~ if_else(.x > 1, .y, NA_character_))
}
xy %>%
group_by(x) %>%
diff_var(., y)
# A tibble: 7 × 1
y
<chr>
1 y
2 NA
3 y
4 y
5 NA
6 y
7 NA
我現在正試圖弄清楚如何跨多個變量執行此操作(理想情況下不包括分組變量)。 對於此處的樣本數據,y 和 z。 分組依據的變量對於所有變量都是相同的。 我使用 map 的不同 forms 的各種嘗試都失敗了; 我正在努力將 arguments 准確地放入我的自定義 function 中。 最終,我希望包含分組變量,但我可以稍后輕松地將其添加回來。
所需的 output:
# A tibble: 7 × 2
y z
<chr> <chr>
1 y NA
2 NA NA
3 y z
4 y z
5 NA NA
6 y NA
7 NA NA
雖然這個網站上有類似標題的問題,但我無法將它們調整到我目前的案例中。
在c
across
使用和傳遞列名向量可能更容易。 此外,最后一步可以在dplyr
本身內完成,即使用across
diff_var <- function(a, c) {
a %>%
transmute(across(all_of(c), n_distinct)) %>%
ungroup() %>%
select(all_of(c)) %>%
mutate(across(everything(), ~ case_when(.x > 1~ cur_column())))
}
-測試
xy %>%
group_by(x) %>%
diff_var(., c("y", "z"))
# A tibble: 7 × 2
y z
<chr> <chr>
1 y <NA>
2 <NA> <NA>
3 y z
4 y z
5 <NA> <NA>
6 y <NA>
7 <NA> <NA>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.