मैं समूहों द्वारा डेटाफ्रेम को सारांशित करना चाहता हूं। समूह के स्तंभों को विभिन्न संकलनों में गतिशील रूप से परिभाषित किया गया है। एक उदाहरण यहाँ है।


gender = c(rep(1, 50), rep(2, 50))
weight = round(rnorm(100, 60, 5), 0)
age = floor(runif(100, min=18, max=30))
my_df <- data.frame(gender, age, weight)

result <- function(
  df = my_df,
  group_by_gender = TRUE,
  group_by_weight = TRUE,
  group_by_age = TRUE
){
  the_result <- df %>%
    group_by(
      gender, #if(group_by_gender, gender, NULL),
      weight, #if(group_by_weight, weight, NULL),
      age #if(group_by_age, age, NULL)
    ) %>%
    summarize(
      count = n()
    )
  return(the_result)
}

Group_by_* के आधार पर मैं समूह में एक या अधिक कॉलम को चालू या बंद नहीं करना चाहता हूं। मैं नहीं देखता, group_by (स्ट्रिंग) के अंदर स्ट्रिंग का निर्माण कैसे करें

3
Rüdiger Kladt 16 अप्रैल 2021, 07:17

2 जवाब

सबसे बढ़िया उत्तर

आप rlang::expr ऑब्जेक्ट्स का एक वेक्टर बना सकते हैं और फिर उसे केवल उन मानों के लिए उपसमुच्चयित कर सकते हैं जिनका आप उपयोग करना चाहते हैं, और उसे group_by में !!! के साथ विस्तारित करें। उदाहरण के लिए

result <- function(
  df = my_df,
  group_by_gender = TRUE,
  group_by_weight = TRUE,
  group_by_age = TRUE
){
  gcols <- rlang::exprs(gender, weight, age)
  gkeep <- c(group_by_gender, group_by_weight, group_by_age)
  the_result <- df %>%
    group_by(!!!gcols[gkeep]) %>%
    summarize(
      count = n()
    )
  return(the_result)
}
2
MrFlick 16 अप्रैल 2021, 04:24

आप .dots पैरामीटर को group_by फ़ंक्शन के भीतर लागू कर सकते हैं:

result <- function(df = my_df, group_by_gender = TRUE, 
                   group_by_weight = TRUE, group_by_age = TRUE){
  nms <- c("gender","weight", "age")
  bool <- c(group_by_gender, group_by_weight, group_by_age)
  
  the_result <- df %>%
    group_by(.dots = nms[bool]) %>%
    summarize(count = n(), .groups = "keep")
  return(the_result)
}
0
Onyambu 16 अप्रैल 2021, 05:22