感到惊讶的是之前没有被问到(据我所知)
我有一个包含多列和两行的data.frame,如下所示。
df<-as.data.frame(rbind(row1=c(NA,NA,rep(0,2),"FOO",NA,"BAR","FOO","FOOBAR","ETC"),
row2=c(300,23.4,1,2,"BAR","FOO","BAR","HELLO","WORLD","ETC")))
我想在第一行中选择条目作为默认值,但前提是它不是NA
。如果是NA
我想要进入第二行。我尝试了以下内容:
apply(df,2,function(x) ifelse(is.na(x[1]),x[2],x[1]))
但是,x是数字和字符的组合,每个列类都需要维护,因此apply会导致问题。此外,我需要它作为数据框而不是命名向量返回。
答案 0 :(得分:2)
试试这个,看看这是不是你想要的。
df<-as.data.frame(rbind(row1=c(NA,NA,rep(0,2),"FOO",NA,"BAR","FOO","FOOBAR","ETC"),
row2=c(300,23.4,1,2,"BAR","FOO","BAR","HELLO","WORLD","ETC")))
outDF <- lapply(df, function(x){
if(is.na(x[[1]])&!is.na(x[[2]])){
x[[1]] <- x[[2]]
}
x
})
data.frame(outDF, stringsAsFactors = FALSE)