Select 多行中的一个非 NA

Select one non NA from multiple rows

很惊讶以前没有人问过这个问题(据我所知)

我有一个包含多列和两行的 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")))

我想 select 默认第一行的条目,但前提是它不是 NA。如果是 NA 我想在第二行输入。我尝试了以下方法:

apply(df,2,function(x) ifelse(is.na(x[1]),x[2],x[1]))

但是,x 是数字和字符的组合,每列 class 都需要维护,因此应用会导致问题。我还需要它作为数据框而不是命名向量返回。

试试这个,看看这是否是您想要的。

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)