如何根据 R 中另一个变量中的匹配值替换变量中的值?

How to replace value in a variable based on matching values in another variable in R?

假设我在 df 中的变量 Font 下有 NA 值。如何根据变量 Group 下的匹配值替换 NA 值? 例如,我希望 Group = 1 的所有行都将 Arial 作为字体,而 Group = 2 的所有行都将 Helvetica 作为字体。 我知道我可以执行以下操作: df$Font[df$Group==1]<-"Arial" 或使用 'car' 包中的 recode() 。 但是,假设有数千种不同的组和字体,我不想在我的代码中逐一输入它们。

Example data:
   Group  Font
   1      Arial
   1      NA
   2      NA
   2      Helvetica

使用ave抓取一个非缺失值并填充:

dat <- read.table(text="   Group  Font
   1      Arial
   1      NA
   2      NA
   2      Helvetica",header=TRUE)

dat$Font <- with(dat, ave(Font, Group, FUN=function(x) replace(x, TRUE, na.omit(x)[1L])))

#  Group      Font
#1     1     Arial
#2     1     Arial
#3     2 Helvetica
#4     2 Helvetica