R使用dplyr的select函数时报错不存在Q2列的问题求助
错误根因
- 用法错误:
dplyr::select()仅用于选择已有列、重命名列,不支持生成新列、赋值常量、写入判断逻辑,你把本属于mutate()的生成新列逻辑写到了select()中,是触发报错的核心原因。 - 管道语法误用:你使用
%>%将raw_data传入后续函数后,不需要额外加raw_data$前缀引用列,重复引用会导致取值逻辑混乱。 - 报错的直接诱因:
select()会将传入的非列名参数解析为要选取的列名,你在参数中写入的常量、判断逻辑被错误解析为列名,刚好你的季度字段存在Q2取值,就触发了「不存在Q2列」的报错。
修复后的代码
直接使用dplyr::transmute()即可满足需求,该函数会生成指定新列,同时自动丢弃其余原始列,符合你构造新数据集的场景:
panel_df <- raw_data %>% transmute( ZIPCODE = ZIP.CODE, YEAR = CRASH.YEAR, QUARTER = CRASH.QUARTER, NUMBER.OF.CRASHES = 1, TOTAL.NUMBER.OF.PERSONS.INJURIED = NUMBER.OF.PERSON.INJURED, TOTAL.NUMBER.OF.PERSONS.KILLED = NUMBER.OF.PERSON.KILLED, NUMBER.OF.CRASHES.WITH.INJURIES = ifelse(NUMBER.OF.PERSON.INJURED > 0 , 1, 0), NUMBER.OF.PERDESTRIANS.INJURED = NUMBER.OF.PEDESTRIANS.INJURED, NUMBER.OF.PEDESTRIANS.KILLED = NUMBER.OF.PEDESTRIANS.KILLED, NUMBER.OF.CYCLIST.INJURED = NUMBER.OF.CYCLIST.INJURED, NUMBER.OF.CYCLIST.KILLED = NUMBER.OF.CYCLIST.KILLED, NUMBER.OF.MOTORIST.INJURED = NUMBER.OF.MOTORIST.INJURED, NUMBER.OF.MOTORIST.KILLED = NUMBER.OF.MOTORIST.KILLED )
如果你习惯分步处理,也可以先用select()挑选需要的原始列,再用mutate()完成列重命名、新字段生成,最终效果完全一致。
内容的提问来源于stack exchange,提问作者Katia Astete
相关产品推荐
相关产品推荐

