加上代码:

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函数取消分组

数据框df_biodiv含有Year、CropName和FirstYear利用dplyr新增列First先判断FirstYear是否为NA是则以CropName分组在Year列查找最小值同CropName有多个Year返回给所有相同CropName的FirstYear否则等于FirstYear

原文地址: https://www.cveoy.top/t/topic/dv5M 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录