我正在使用Rstudio。我有一个简单的数据框架,如下所示:
df <-
ID TAD TNOM
1 0 0
1 0.3 NA
1 0.6 0.5
1 1 NA
我想要一个代码,用TAD
列中相应的行值填充TNOM
的NA。
结果应该是:
df <-
ID TAD TNOM
1 0 0
1 0.3 0.3
1 0.6 0.5
1 1 1
示例:
df <- data.frame(ID=c(1,1,1,1), TAD=c(0,0.3,0.6,1), TNOM=c(0,NA,0.5,NA))
df
# ID TAD TNOM
# 1 1 0.0 0.0
# 2 1 0.3 NA
# 3 1 0.6 0.5
# 4 1 1.0 NA
使用ifelse(condition,TRUE,FALSE)
df$TNOM<-ifelse(is.na(df$TNOM),df$TAD,df$TNOM)
或使用with(data, expression)
df$TNOM<-with(df,ifelse(is.na(TNOM),TAD,TNOM))
或基于is.na()
重新赋值df$TNOM[is.na(df$TNOM)] <- df$TAD[is.na(df$TNOM)]
所有三个给出:
df
# ID TAD TNOM
# 1 1 0.0 0.0
# 2 1 0.3 0.3
# 3 1 0.6 0.5
# 4 1 1.0 1.0
使用sqldf
:
library(sqldf)
sqldf('select ID, TAD,
case when TNOM is null then TAD else TNOM end as TNOM
from df')
输出: ID TAD TNOM
1 1 0.0 0.0
2 1 0.3 0.3
3 1 0.6 0.5
4 1 1.0 1.0