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

R语言:如何对数据框中的国家名称生成累积计数?

解决R语言数据框中国家累积计数的问题

嘿,我来帮你搞定这个累积计数的需求!你要的其实是按国家首次出现的顺序,统计累积的新增国家数量——每遇到一个从未出现过的国家,计数就加1;重复出现的国家则保持当前的最大计数值。直接用count()或tally()这类分组统计函数肯定达不到效果,咱们换个思路来实现:

方法一:用dplyr包实现(更直观)

如果你习惯用tidyverse系列的工具,用dplyr的mutate()结合cumsum()和duplicated()就能轻松搞定:

# 先加载dplyr包
library(dplyr)

# 你的原始数据框
df <- data.frame(country = c("Sweden", "Germany", "Sweden", "Sweden", "Germany", "Vietnam"),
                 year= c(1834, 1846, 1847, 1852, 1860, 1865))

# 生成累积计数列n
df_result <- df %>%
  mutate(n = cumsum(!duplicated(country)))

# 查看最终结果
print(df_result)

代码解释:

  • !duplicated(country):这个表达式会生成一个逻辑向量,第一次出现的国家对应TRUE(数值1),重复出现的国家对应FALSE(数值0)
  • cumsum():对上面的0/1向量做累积求和,每遇到一个新国家,总和就加1;重复的国家则维持当前总和,完美匹配你要的输出格式。

方法二:基础R实现(无需加载包)

如果不想额外加载包,用基础R的代码也能实现,更简洁:

# 你的原始数据框
df <- data.frame(country = c("Sweden", "Germany", "Sweden", "Sweden", "Germany", "Vietnam"),
                 year= c(1834, 1846, 1847, 1852, 1860, 1865))

# 直接添加累积计数列
df$n <- cumsum(!duplicated(df$country))

# 查看结果
print(df)

最终输出结果

不管用哪种方法,运行后都会得到你期望的结果:

country year n
1   Sweden 1834 1
2  Germany 1846 2
3   Sweden 1847 2
4   Sweden 1852 2
5  Germany 1860 2
6  Vietnam 1865 3

内容的提问来源于stack exchange,提问作者Dr. Flow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:37:25