按指定列分组后对数据框目标列应用自定义函数的问题
问题分析与解决方案
原代码存在两个核心问题:
split(some_data_frame['ChosenColumn'], ...)拆分出的每个元素是单列数据框,但自定义函数cut.at.n.tile需要传入向量,导致quantile处理出错;sapply返回的结果结构无法直接和原数据框的行对齐,赋值时会出现长度不匹配问题。
以下是几种可行的修正方案:
方案1:Base R 修正写法
方式A:拆分+还原
先提取目标列的向量进行拆分,应用函数后再还原回原顺序:
# 按分组拆分目标列(提取向量而非数据框) grouped_data <- split(some_data_frame$ChosenColumn, some_data_frame$SomeGroupingColumn) # 应用自定义函数,再拆分回原数据框的顺序 some_data_frame$SeasonTypeNumber <- unsplit(lapply(grouped_data, cut.at.n.tile), some_data_frame$SomeGroupingColumn)
方式B:使用ave函数(更简洁)
ave函数专门用于分组计算,自动处理结果与原数据的对齐:
some_data_frame$SeasonTypeNumber <- ave(some_data_frame$ChosenColumn, some_data_frame$SomeGroupingColumn, FUN = cut.at.n.tile)
方案2:tidyverse/dplyr 风格写法
如果习惯使用tidyverse生态,group_by+mutate的写法更直观易读:
library(dplyr) some_data_frame <- some_data_frame %>% group_by(SomeGroupingColumn) %>% mutate(SeasonTypeNumber = cut.at.n.tile(ChosenColumn)) %>% ungroup()
内容的提问来源于stack exchange,提问作者cs0815
相关产品推荐
相关产品推荐

