R语言如何筛选数据框中PRICE字段被修改过的行
解决方案
你只需要在修改价格的步骤里新增一个标记列,记录当前行是否满足价格修改条件即可,不需要调整原有业务逻辑,修改后的完整代码如下:
# 原有工具函数定义不变 Mode <- function(x) { ux <- unique(x) ux[which.max(tabulate(match(x, ux)))] } digits_different <- function(mode, price){ mode <- str_split(as.character(mode), "")[[1]] price <- str_split(as.character(price), "")[[1]] if(length(mode) < length(price)){ mode <- c(mode, "0") } else if(length(price) < length(mode)) { price <- c(price, "0") } sum(mode != price) } df <- df %>% group_by(PPCODE) %>% filter(sum(PRICE != Mode(PRICE)) == 1) # 核心逻辑调整:新增修改标记列,暂不删除MODE字段 df <- df %>% group_by(CODE) %>% summarise(MODE = Mode(PRICE)) %>% right_join(dfn, by = "CODE") %>% rowwise() %>% mutate( # 先标记是否符合价格修改条件 is_price_modified = digits_different(PRICE, MODE) == 1, # 再执行价格修改逻辑 PRICE = ifelse(is_price_modified, MODE, PRICE) ) %>% ungroup() # 直接筛选价格被修改过的行 modified_rows <- df %>% filter(is_price_modified == TRUE) # 后续不需要标记和MODE字段可以再删除 df <- df %>% select(-MODE, -is_price_modified)
如果你已经执行完原有代码没有保存标记,只要还保留了修改前的原始数据集,直接比对修改前后的PRICE字段也可以筛选:
# 假设原始未修改的数据集为original_df modified_rows <- df %>% mutate(original_price = original_df$PRICE) %>% filter(PRICE != original_price)
内容的提问来源于stack exchange,提问作者Bambeil
相关产品推荐
相关产品推荐

