如何基于R tibble的year列按站点生成年份配对及xend、yend列
解决方案
你可以通过tidyverse生态的dplyr自连接逻辑快速实现需求,完整可运行代码如下:
# 加载依赖包 library(tidyverse) # 生成原始示例数据 set.seed(1) df <- tibble::tibble(site = c(rep("A",3), rep("B",3)), year = rep(2010:2012, 2), x = rnorm(6), y = rnorm(6)) # 数据处理生成目标结构 df_result <- df %>% group_by(site) %>% # 同站点自连接生成所有年份组合 inner_join(df, by = "site", suffix = c("_from", "_to")) %>% # 仅保留早年份到晚年份的正向配对 filter(year_from < year_to) %>% # 重命名列符合输出要求 rename( xstart = x_from, ystart = y_from, xend = x_to, yend = y_to ) %>% # 调整列顺序和需求一致 select(site, year_from, year_to, xstart, ystart, xend, yend) %>% ungroup() # 打印验证结果 print(df_result)
运行上述代码后输出的结果与你期望的结构完全一致,自动过滤了反向配对,可直接传入ggplot的geom_segment图层使用:
# A tibble: 6 × 7 site year_from year_to xstart ystart xend yend <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> 1 A 2010 2011 -0.626 0.487 0.184 0.738 2 A 2010 2012 -0.626 0.487 -0.836 0.576 3 A 2011 2012 0.184 0.738 -0.836 0.576 4 B 2010 2011 1.60 -0.305 0.330 1.51 5 B 2010 2012 1.60 -0.305 -0.820 0.390 6 B 2011 2012 0.330 1.51 -0.820 0.390
内容的提问来源于stack exchange,提问作者Freddie J. Heather
相关产品推荐
相关产品推荐

