0
我想在函數中使用列名稱,而不明確地將其作爲參數傳遞給該函數,在整數中調用(dplyr
,tidyr
,purrr
,...)管道。這是因爲我想在許多列上使用此函數(例如,分別使用mutate_all
和map
),而不是分別使用每個列的mutate
。獲取一列的名稱作爲一個額外的參數,以在mutate_all整齊管道中起作用
例子:
比方說,我想在每列值由列名和下劃線作爲前綴。以下作品:
library(dplyr)
library(purrr)
library(stringr)
tib <- tibble(a = 1:3, b = 4:6, c = 7:9)
f <- function(value, column_name) {
str_c(column_name, "_", value)
}
tib %>%
mutate(a = map_chr(a, f, "a"),
b = map_chr(b, f, "b"),
c = map_chr(c, f, "c"))
# A tibble: 3 x 3
a b c
<chr> <chr> <chr>
1 a_1 b_4 c_7
2 a_2 b_5 c_8
3 a_3 b_6 c_9
但是,如果我有n >> 3列?
這將是很好,有其自身找出列名的函數,然後我可以使用mutate_all
:
f2 <- function(value) {
column_name <- miraculously_get_column_name()
str_c(column_name, "_", value)
}
tib %>%
mutate_all(f2)
但是,這沒有發生。一個可能更爲現實的願望是作爲一個額外的參數輸入到mutate_all
它發現列名每列的表達式並使用原f
,是這樣的:
tib %>%
mutate_all(f, get_column_name_somehow())
那麼,如何做到這一點與管道(如果還有其他方法,並且沒有辦法用一個整潔的管道做這件事,那就讓我們來做吧)。
這是驚人的,我唯一的問題是我不明白。但是,對我來說,謝謝。 'map2_dfr'? 「map2_df」發生了什麼? –
yes'map_df'也可以,它在包索引中,但是doc,'map_df','map_dfr'和'map_dfc'沒有提到,在這裏給出了相同的結果 –
'names(。)'中的點調用主輸入,在這種情況下,'tib' –