r语言 - 如何根据主数据框架中选择的特征生成动态汇总表



嗨,我有一个数据框架,它是聚类的结果。下面是一个示例:

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的每列的平均值,而不管列的数量。

相关内容

  • 没有找到相关文章

最新更新