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)
很惊讶以前没有人问过这个问题(据我所知)
我有一个包含多列和两行的 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)