在R语言中删除存在零价格记录的股票资产
解决R语言中删除出现过零价格的股票数据问题
原代码的问题
你的循环代码存在几个关键问题:
- 语法错误:判断价格等于0应该用
==,你写的=是赋值运算符,会直接触发语法报错。 - 循环逻辑缺陷:每次删除行后,数据框的行数会减少,循环索引
i会和实际行号不匹配,最终导致删错数据或漏删。 filter函数用法错误:没有指定要操作的数据框,正确写法应为filter(数据框名, 条件)。
正确解决方案
无需用循环,用分组筛选或先标记异常股票的方式更高效准确:
方法1:使用dplyr(推荐,适配tidyverse工作流)
写法一:分组后直接筛选
library(dplyr) # 按股票识别码分组,仅保留所有价格均不为0的股票 clean_data <- data %>% group_by(股票识别码) %>% filter(all(price != 0)) %>% ungroup()
all(price != 0)表示该股票的所有价格记录都不为0,满足条件的股票组会被完整保留。
写法二:先找出异常股票再过滤
library(dplyr) # 提取所有出现过0价格的股票识别码(去重) bad_stock_ids <- data %>% filter(price == 0) %>% pull(股票识别码) %>% unique() # 过滤掉这些异常股票的所有记录 clean_data <- data %>% filter(!股票识别码 %in% bad_stock_ids)
方法2:使用基础R(无需额外安装包)
# 统计每个股票是否出现过0价格 has_zero_price <- tapply(data$price, data$股票识别码, function(x) any(x == 0)) # 筛选出没有0价格的股票ID valid_stock_ids <- names(has_zero_price)[!has_zero_price] # 提取有效股票的所有数据 clean_data <- data[data$股票识别码 %in% valid_stock_ids, ]
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

