【发布时间】:2022-01-20 13:27:53
【问题描述】:
我有一些带有经理 ID、类型和位置的虚假案例数据。我想使用经理在给定位置的平均案例数自动创建数据框。
# create fake data
manager_id <- c(1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3)
type <- c("A", "A", "B", "B", "B", "A", "A", "A", "C", "A", "B", "B", "C", "C", "C")
location <- c("Beach", "Beach", "Beach", "Beach", "Beach", "City", "City", "City", "Farm", "Farm", "Farm", "Farm", "Farm", "Farm", "City")
manager_id <- data.frame(manager_id)
type <- data.frame(type)
location <- data.frame(location)
df <- cbind(manager_id, type, location)
创建假数据后,我创建了一个函数来找到这个平均值。该功能有效。
avgs_function <- function(dat){
dat1 <- dat %>% group_by(manager_id) %>% summarise(total = n())
total <- mean(dat1$total)
total <- round(total, 0)
total
}
然后我遍历每个位置,使用 avgs_function 创建数据帧,并将它们存储在一个列表中。然后我将数据框调用到我的全局环境中。这里出了点问题,我无法弄清楚。奇怪的是昨天还好好的。
df_list <- unique(df$location) %>%
set_names() %>%
map(~avgs_function(df))
names(df_list) <- paste0(names(df_list), "_avg")
list2env(df_list, envir = .GlobalEnv)
现在,代码给出了这些值:
Beach_avg = 5
City_avg = 5
Farm_avg = 5
我想要:
Beach_avg = 5
City_avg = 2
Farm_avg = 3
我相信问题出在 purrr 包上。任何帮助将不胜感激!
【问题讨论】:
-
@akrun 对不起,如果我仍然误解,但我确实得到了城市的平均 2。 city % filter(location == "City") city % group_by(manager_id) %>% summarise(total = n()) mean(city$total) 我希望有三个独立的向量,其中 Beach_avg = 5、City_avg = 2、Farm_avg = 3。
-
我认为你需要
df %>% group_by(location) %>% summarise(n = table(manager_id)) %>% summarise(Mean = mean(n), .groups = 'drop')。我在想你需要它的另一种方式