嗨,我有一个数据框架,它是聚类的结果。下面是一个示例:
ave_remark_best ave_price_per_sqft ave_age ave_DOM ave_activity_rate cluster
1006332 1.00000000 1419.6900 12.0000000 7.000000 1.0000000 3
1010660 1.00000000 912.1800 7.0000000 10.000000 1.0000000 3
1012960 0.00000000 600.7400 26.3000000 36.100000 1.6666667 2
1013515 0.25000000 673.8725 9.7500000 10.500000 0.6666667 4
1014490 0.00000000 439.4600 31.0000000 104.000000 1.0000000 2
1018326 0.00000000 922.5500 12.0000000 10.000000 1.0000000 4
1018446 0.25000000 717.8285 16.0375000 30.387500 10.0000000 1
为了检查结果集群,我想有一个函数为每个集群创建一个包含所有这些特性的汇总表,因此我运行如下所示的代码:
cluster_summary <- agent_temp %>% group_by(cluster) %>% summarise(n=n(),
ave_activity_rate_c=mean(ave_activity_rate),
ave_DOM_c =mean(ave_DOM),
ave_age_c=mean(ave_age),
ave_remark_best_c=mean(ave_remark_best),
ave_price_per_sqft_c= mean(ave_price_per_sqft))
so exceptn,本表中每个特征的名称为变量+"_c">
现在我想通过使用一个函数来自动化这个过程;然而,我不确定如何使这个函数动态因此,它会根据可用的列自动生成列。基本上,如果主数据帧现在如下所示:
ave_remark_best ave_price_per_sqft ave_age cluster
1006332 1.00000000 1419.6900 12.0000000 3
1010660 1.00000000 912.1800 7.0000000 3
1012960 0.00000000 600.7400 26.3000000 2
1013515 0.25000000 673.8725 9.7500000 4
1014490 0.00000000 439.4600 31.0000000 2
1018326 0.00000000 922.5500 12.0000000 4
1018446 0.25000000 717.8285 16.0375000 1
所以它只生成一个带有n的汇总表,ave_remark_best,ave_price_per_sqft,ave_age.我该怎么做呢?所以基本上,我的主要挑战是如何找到哪些列存在于主数据框架中,所以我通过这些列group_by
并创建摘要。
当然,函数应该像这样开始:
cluster_summary_generator <- function (agent_sel, kout){
agent_temp<-agent_sel
agent_temp$cluster <- as.factor(kout$cluster)
cluster_summary <- agent_temp %>% group_by(cluster) %>% .......
}
但是我不知道如何完成这个
我们可以用ensym
转换为符号并求值。它可以传递未加引号和加引号的
cluster_summary_generator <- function (agent_sel, cl){
agent_sel %>%
group_by(!! rlang::ensym(cl)) %>%
summarise(across(.fns = mean, na.rm = TRUE))
}
cluster_summary_generator(df, cluster)
cluster_summary_generator(df, "cluster")
如果集群列总是被称为cluster
,您可以使用:
library(dplyr)
cluster_summary_generator <- function (agent_sel){
agent_sel %>%
group_by(cluster) %>%
summarise(across(.fns = mean, na.rm = TRUE))
}
cluster_summary_generator(df)
如果集群列可以跨数据集更改,可以将其作为参数传递给函数。
cluster_summary_generator <- function (agent_sel, cl){
agent_sel %>%
group_by({{cl}}) %>%
summarise(across(.fns = mean, na.rm = TRUE))
}
cluster_summary_generator(df, cluster)
这将返回数据框架中每个cluster
的每列的平均值,而不管列的数量。