R语言如何对数据框分组生成标记年份存在的Yes/No逻辑列
实现代码
你可以借助tidyverse套件中的dplyr+tidyr工具实现需求,完整代码如下:
# 加载依赖包,也可以分别加载dplyr和tidyr library(tidyverse) # 你的原始数据构造代码 df <- data.frame(id=1,year=c(2012:2018)) df <- rbind(df, data.frame(id=2,year=c(2012:2015))) df <- rbind(df, data.frame(id=3,year=c(2015:2018))) # 核心逻辑代码 df %>% # 按id分组统计记录数,同时给存在的年份打标记 group_by(id) %>% mutate( n = n(), exist_tag = "Yes" ) %>% ungroup() %>% # 长表转宽表,年份转为列名,空值填充为空白 pivot_wider( id_cols = c(id, n), names_from = year, values_from = exist_tag, names_prefix = "yr_", values_fill = "" ) %>% # 按id排序 arrange(id)
代码逻辑说明
- 首先按
id分组,用mutate生成每个id对应的总记录数n,同时给每一行打存在标记Yes,代表对应id存在该年份的记录 - 用
pivot_wider将长格式数据转为宽格式,把年份值转为列名并统一加yr_前缀,不存在的年份对应值填充为空白字符串 - 最后按id排序即可得到你需要的目标结果
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

