Mam następujący przykład, w którym przekazuję prostą ramkę danych do funkcji podsumowującej kolumnę. Nazwa kolumny podsumowującej, s
Chciałbym mieć jako parametr funkcji:
df <- data.frame(id = c(1,1,1,1,1,2,2,2,2,2),
a=c(1:10),
b=c(10:19))
sum <- function(df, s){
df <- df %>%
group_by(id) %>%
summarize(s = sum(a))
return(df)
}
sum(df = df, s = "summarizing.column.label")
Jednak niezależnie od ustawionej przeze mnie wartości, kolumna podsumowująca zawsze otrzymuje tę samą nazwę s
. Czy jest sposób, aby to zmienić?
EDYCJA: Wyjście, które chciałbym, to:
sum(df = df, s = "summarizing.column.label")
id summarizing.column.label
<dbl> <int>
1 1.00 15
2 2.00 40
sum(df = df, s = "a")
id a
<dbl> <int>
1 1.00 15
2 2.00 40
Odpowiedzi:
1 dla odpowiedzi № 1Jeśli przekazujemy cytowany argument, to jedna opcja jest po summarise
, Używamy rename_at
sumf <- function(df, s){
df %>%
group_by(id) %>%
summarize(a = sum(a))%>%
rename_at("a", ~ s)
}
sumf(df, s ="summarizing.column.label" )
# A tibble: 2 x 2
# id summarizing.column.label
# <dbl> <int>
#1 1.00 15
#2 2.00 40
sumf(df, s ="a" )
# A tibble: 2 x 2
# id a
# <dbl> <int>
#1 1.00 15
#2 2.00 40
Lub inną opcją jest skorzystanie z :=
z !!
sumf <- function(df, s){
df %>%
group_by(id) %>%
summarize(a = sum(a))%>%
rename(!! (s) := a)
}
sumf(df, s ="summarizing.column.label" )
# A tibble: 2 x 2
# id summarizing.column.label
# <dbl> <int>
#1 1.00 15
#2 2.00 40
Lub w ramach summarise
sumf <- function(df, s){
df %>%
group_by(id) %>%
summarise(!!(s) := sum(a))
}
sumf (df, s = "summarizing.column.label")
0 dla odpowiedzi nr 2
Spróbuj tego:
sum <- function(df, s){
df <- df %>%
group_by(id) %>%
summarize(!!s := sum(a))
return(df)
}