在R语言中创建行级配对(用于哑铃图)
解决哑铃图行配对问题
核心思路
观察目标结果可知,配对逻辑是将年份尾数相同的行归为同一组(比如1960和1970尾数都是0,归为Pair1;1961和1971尾数都是1,归为Pair2),我们可以基于年份的尾数来生成配对编号。
代码实现(R语言,使用dplyr包)
首先模拟你的原始数据框:
df <- data.frame( Year = c(1960, 1961, 1970, 1971), Species = rep("Cod", 4), Tonnes = c(123, 456, 124, 457) )
然后用dplyr处理生成Pair列:
library(dplyr) df_with_pair <- df %>% # 提取年份的尾数(Year模10) mutate(year_mod10 = Year %% 10) %>% # 按尾数分组,给每个组分配唯一的Pair编号 group_by(year_mod10) %>% mutate(Pair = cur_group_id()) %>% # 移除中间辅助列,恢复原始列顺序 ungroup() %>% select(-year_mod10) %>% select(Year, Species, Tonnes, Pair)
执行后得到的结果就是你需要的配对数据框:
| Year | Species | Tonnes | Pair |
|---|---|---|---|
| 1960 | Cod | 123 | 1 |
| 1961 | Cod | 456 | 2 |
| 1970 | Cod | 124 | 1 |
| 1971 | Cod | 457 | 2 |
扩展说明
如果你的数据中有多个物种,只需在group_by中加入Species即可,确保同一物种内按年份尾数配对:
df_with_pair <- df %>% mutate(year_mod10 = Year %% 10) %>% group_by(Species, year_mod10) %>% mutate(Pair = cur_group_id()) %>% ungroup() %>% select(-year_mod10) %>% select(Year, Species, Tonnes, Pair)
内容的提问来源于stack exchange,提问作者Fish_Person
相关产品推荐
相关产品推荐

