如何根据 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
假设我在 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