我目前正在重复很多代码,因为我需要 summarize 总是为不同的组使用相同的列。如何通过只编写一次 summarize 函数(始终相同)来有效地做到这一点,但要逐个定义输出名称和 group_by 参数?

一个最低限度的例子:

col1 <- c("UK", "US", "UK", "US")
col2 <- c("Tech", "Social", "Social", "Tech")
col3 <- c("0-5years", "6-10years", "0-5years", "0-5years")
col4 <- 1:4
col5 <- 5:8

df <- data.frame(col1, col2, col3, col4, col5)

result1 <- df %>%
  group_by(col1, col2) %>%
  summarize(sum1 = sum(col4, col5))

result2 <- df %>%
  group_by(col2, col3) %>%
  summarize(sum1 = sum(col4, col5))

result3 <- df %>%
  group_by(col1, col3) %>%
  summarize(sum1 = sum(col4, col5))

最佳答案

您还可以在这些情况下使用 purrr::partial :

library(purrr)
summarize45 <- partial(summarize, sum1 = sum(col4, col5))

result1b <- df %>%
  group_by(col1, col2) %>%
  summarize45()

identical(result1, result1b)
# [1] TRUE

或者进一步插入它:
gb_df <- partial(group_by, df)

result1c <- gb_df(col1, col2) %>% summarize45()

identical(result1, result1c)
# [1] TRUE

关于用函数替换多个 `summarize` 语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55902994/

10-12 17:04