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
相关产品推荐
相关产品推荐

