【发布时间】:2017-04-08 00:32:51
【问题描述】:
很惊讶以前没有人问过这个问题(据我所知)
我有一个包含多列和两行的 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 会导致问题。我还需要它作为数据框而不是命名向量返回。
【问题讨论】:
-
你的应用函数应该是:(df,2,function(x) ifelse(is.na(x[1]),x[2],x[1]))
-
好地方,已解决问题。
-
嗯,共享的数据框将所有列作为因子。