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

R语言:统计各年份数据提交地点数量的更简洁实现方法?

问题与解答

问题描述

我有一组包含不同地点、多年份的观测数据,结构如下:

location year  variable  dataentry
1         1970  A        288
1         1970  A        281
1         1970  B        282
2         1970  A        282
2         1971  B        284
2         1971  B        287

其中variable和dataentry列仅用于标识存在数据提交,无实际分析价值。我需要统计各年份中有多少地点提交了数据,预期输出如下:

year  NumberOfLocations
1970  2
1971  1

我目前通过以下代码实现了需求,但想知道有没有更简洁的写法:

d1 <- data %>% group_by(location, year) %>% summarise(da = mean(dataentry)) 
d2 <- d1 %>% count(location, year)
d3 <- d2 %>% group_by(year) %>% summarise(NumberOfLocations = sum(n))

简洁实现方式

当然有更简洁的写法,核心思路是聚焦「统计每年的唯一地点数」这个核心需求,跳过不必要的中间步骤,这里提供两种高效的方案:

方案一:先去重再统计

data %>%
  distinct(location, year) %>%
  count(year, name = "NumberOfLocations")
  • distinct(location, year):保留每个地点对应年份的唯一记录,自动过滤同一地点同年份的重复数据
  • count(year, name = "NumberOfLocations"):按年份分组统计数量,直接指定结果列名为需求中的NumberOfLocations

方案二:直接分组统计唯一地点数

data %>%
  group_by(year) %>%
  summarise(NumberOfLocations = n_distinct(location))
  • group_by(year):按年份分组
  • n_distinct(location):直接统计每组内的唯一地点数量,一步到位得到目标结果

这两种方法都能精准输出预期结果,且比原代码更简洁高效,无需创建多个中间变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:32:47