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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:45:28