数据框df_biodiv含有Year、CropName和FirstYear利用dplyr新增列First先判断FirstYear是否为NA是则以CropName分组在Year列查找最小值同CropName有多个Year返回给所有相同CropName的FirstYear否则等于FirstYear
加上代码:
library(dplyr)
df_biodiv <- df_biodiv %>%
mutate(First = ifelse(is.na(FirstYear), min(Year, na.rm = TRUE), FirstYear)) %>%
group_by(CropName) %>%
mutate(First = ifelse(is.na(FirstYear), First[which.min(Year)], First)) %>%
ungroup()
解释一下,首先用ifelse函数判断FirstYear是否为NA,如果是,则用min函数查找同一CropName下Year列的最小值(na.rm = TRUE表示忽略NA),并将其赋值给First列,否则直接将FirstYear赋值给First列。接着用group_by函数按照CropName分组,再用ifelse函数判断是否需要更新First列,如果需要,则用which.min函数查找Year列最小值所在的位置,并将对应位置的First值赋值给所有相同CropName的First列,最后用ungroup函数取消分组
原文地址: https://www.cveoy.top/t/topic/dv5M 著作权归作者所有。请勿转载和采集!