You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:06:06