如何在R中基于单列值自动按条件生成新列
解决方案:按年份分组自动计算并填充列
dplyr 方法(推荐,适配你的现有代码风格)
利用group_by()按年份分组后,mutate()会自动为每组计算统计量并填充到该组的所有行,无需手动指定年份,不管年份数量多少都能自动处理:
set.seed(3) c1 <- sample(x = c("2010","2011"), size = 10, replace = T) c2 <- sample(x = c(1:5), size = 10, replace = T) c3 <- sample(x = c(6:10), size = 10, replace = T) dat <- data.frame(c1, c2, c3) library(dplyr) dat <- dat %>% group_by(c1) %>% mutate( d1 = min(c2), # 对应年份c2列的最小值,自动填充到该年份所有行 d2 = max(c3) # 对应年份c3列的最大值,自动填充到该年份所有行 ) %>% ungroup() # 可选:取消分组,避免后续操作受分组状态影响 print(dat)
Base R 方法(无需加载额外包)
使用ave()函数按分组计算统计量,返回与原数据长度一致的结果,自动完成重复填充:
set.seed(3) c1 <- sample(x = c("2010","2011"), size = 10, replace = T) c2 <- sample(x = c(1:5), size = 10, replace = T) c3 <- sample(x = c(6:10), size = 10, replace = T) dat <- data.frame(c1, c2, c3) dat$d1 <- ave(dat$c2, dat$c1, FUN = min) dat$d2 <- ave(dat$c3, dat$c1, FUN = max) print(dat)
内容的提问来源于stack exchange,提问作者rez
相关产品推荐
相关产品推荐

