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

R语言新手求助:基于年份与类别列统计值列非缺失频次

嗨~作为R新手碰到这种数据整理的需求太正常了,我来帮你一步步实现想要的结果!

首先咱们先把示例数据整理成数据框(方便后续操作),顺便加个随机种子让结果可重复:

set.seed(123) # 固定随机数,让每次运行结果一致
RANDOM <- sample(c("A","B","C","D"), size = 100, replace = TRUE)
Year <- sample(c(2008,2009,2010), 100, TRUE)
Value <- sample(c(0.22, NA), 100, TRUE)
df <- data.frame(Ticker = RANDOM, Year, Value) # 提前把RANDOM改名为Ticker,更贴合你的需求

接下来推荐用tidyverse工具包来处理,代码直观易懂,适合新手:

library(tidyverse)

# 核心步骤:过滤非缺失值 → 分组计数 → 转成宽格式表格
result <- df %>%
  filter(!is.na(Value)) %>% # 只保留Value不为空的行
  count(Ticker, Year) %>% # 按Ticker和年份统计数量
  pivot_wider(
    names_from = Year,    # 把Year列的内容作为新列名
    values_from = n,      # 把计数结果n对应到新列里
    values_fill = ""      # 没有数据的单元格填空字符串,想要0的话改成0就行
  )

运行后你就能得到和你想要的格式完全一致的结果啦,示例输出大概是这样:

Ticker200820092010
A9117
B1126
C859
D768

如果你不想装额外的包,用基础R也能实现:

# 先统计非缺失值的交叉表
count_table <- table(df$Ticker[!is.na(df$Value)], df$Year[!is.na(df$Value)])
# 转成数据框
result_base <- as.data.frame.matrix(count_table)
# 把0换成空字符串(如果不需要的话可以跳过这步)
result_base[result_base == 0] <- ""

两种方法都能达到你的需求,推荐先用tidyverse的方式,代码逻辑更清晰,后续调整也方便~

内容的提问来源于stack exchange,提问作者bli12blu12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:29:50