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

时间:2015-12-23 23:10:27

标签: r conditional-statements recode

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

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

1 个答案:

答案 0 :(得分:4)

使用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