在R中生成虚拟变量:判断主数据框年份是否存在于其他数据框
给主数据框添加事件标记列的实现方法
不用写for循环,R里有更简洁高效的向量操作方式就能完成需求,以下是两种常用方法:
基础R实现
利用%in%运算符判断年份是否存在于事件B/C的年份列表中,再将逻辑值转为0/1整数:
# 为main_df添加Event B标记列 main_df$`Event B` <- as.integer(main_df$year_eventA %in% df1$year_eventB) # 为main_df添加Event C标记列 main_df$`Event C` <- as.integer(main_df$year_eventA %in% df2$year_eventC)
%in%会生成一个逻辑向量,每个元素对应main_df的年份是否出现在对应事件的年份里as.integer()将TRUE转为1,FALSE转为0,正好符合0/1标记的需求
tidyverse风格实现(适配Python转R的习惯)
如果你习惯类似pandas的链式操作,可以用dplyr包的mutate()函数:
library(dplyr) main_df <- main_df %>% mutate( `Event B` = as.integer(year_eventA %in% df1$year_eventB), `Event C` = as.integer(year_eventA %in% df2$year_eventC) )
运行上述任意一种方法后,查看main_df就能得到目标结果:
| year_eventA | Event B | Event C |
|---|---|---|
| 1995 | 0 | 1 |
| 1996 | 0 | 0 |
| 1997 | 1 | 0 |
| 1998 | 0 | 0 |
| 1999 | 1 | 0 |
内容的提问来源于stack exchange,提问作者Rebecca James
相关产品推荐
相关产品推荐

