如何基于关联累计值对DataFrame列排序并合并唯一值?
处理First_Name折叠与排序的解决方案
没问题,我来帮你实现把First_Name折叠为唯一值,并按累计频次排序的需求!下面用两种方法来完成,你可以根据自己的习惯选择:
方法一:使用基础R实现
基础R里的aggregate()函数可以快速完成分组求和,再结合order()排序:
# 先计算每个First_Name的累计Frequency sum_df <- aggregate(Frequency ~ First_Name, data = df, sum) # 按累计Frequency降序排序(想要升序就去掉负号) sum_df_sorted <- sum_df[order(-sum_df$Frequency), ] # 查看结果 sum_df_sorted
运行后会得到这样的结果:
First_Name Frequency 1 John 23 2 Alex 10 3 James 9
方法二:使用dplyr包实现(更简洁直观)
如果你习惯用tidyverse系列的工具,dplyr的链式语法会更清晰:
首先确保已经安装并加载dplyr包:
# 没安装的话先运行这个 # install.packages("dplyr") library(dplyr)
然后执行分组、求和、排序操作:
df_sorted <- df %>% group_by(First_Name) %>% summarise(Total_Frequency = sum(Frequency)) %>% # 计算累计频次,自定义列名 arrange(desc(Total_Frequency)) # 降序排序,升序用arrange(Total_Frequency) # 查看结果 df_sorted
输出结果如下:
# A tibble: 3 × 2 First_Name Total_Frequency <chr> <dbl> 1 John 23 2 Alex 10 3 James 9
解释一下关键步骤:
group_by(First_Name):把数据按First_Name分组,每个名字为一组summarise():对每组的Frequency求和,生成新的累计频次列arrange(desc(Total_Frequency)):按照累计频次从高到低排序,去掉desc()就是从低到高排序
这样处理后,First_Name就都是唯一值,并且按累计频次排好序啦!
内容的提问来源于stack exchange,提问作者superasiantomtom95
相关产品推荐
相关产品推荐

