R语言:为新增行添加source标识及整合至dplyr流程的方法
问题解答
你的判断逻辑是正确的
原始数据中所有行的source值都是"ORIGINAL",使用complete补全缺失年份的行时,新增行的source会被自动设为NA。因此通过is.na(source)判断来标记新增行(设为"MISSING")、保留原始行的"ORIGINAL"标签,这个逻辑完全没问题。整合到dplyr链式代码的方法
直接在现有链式操作的末尾添加一个mutate步骤即可,不用单独提取数据框修改,更符合tidyverse的风格:
library(dplyr) library(tidyr) final = my_data %>% group_by(name) %>% complete(year = first(year): last(year)) %>% mutate(age = ifelse(is.na(age), first(age) + row_number() - 1, age)) %>% fill(c(gender, country_of_birth), .direction = "down") %>% # 新增source标记逻辑 mutate(source = ifelse(is.na(source), "MISSING", source))
如果追求更好的可读性,也可以用case_when替代ifelse:
mutate(source = case_when( is.na(source) ~ "MISSING", TRUE ~ source ))
测试结果示例:比如John的2012、2013年行,source会被标记为"MISSING",2010、2011、2014年的行保留"ORIGINAL",完全符合需求。
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

