我在我的" info"数据帧:
sci wd.sps1 wd.sps2 wd.genus wd.family
1 Acacia polyphylla 0.6185 0.6185 0.6335 0.69
2 Acacia polyphylla 0.6185 0.6185 0.6335 0.69
3 Acacia polyphylla 0.6185 0.6185 0.6335 0.69
4 Acacia polyphylla 0.6185 0.6185 0.6335 0.69
5 Acosmium nitens 0.8200 0.8200 0.8100 0.69
6 Acosmium nitens 0.8200 0.8200 0.8100 0.69
7 Aiouea sp. NA NA 0.3700 0.55
8 Aiouea sp. NA NA 0.3700 0.55
9 Allophylus robustus NA NA 0.3900 0.73
10 Allophylus robustus NA NA 0.3900 0.73
我想出了这个循环来获得数据帧中出现的第一个wd .____值(即第1行应该为0.6185,第7行为0.3700,第10行为0.3900):
for (i in 1:nrow(info)) {
if( all( is.na (info[i,c("wd.sps1","wd.sps2", "wd.genus", "wd.family")]))) {
next()
}
info[i,]$wd = with(info[i,], c(wd.sps1, wd.sps2, wd.genus,
wd.family)[min( which( !is.na( c(wd.sps1, wd.sps2, wd.genus, wd.family))))]
)
}
我使用了一个具有不同数据帧的类似循环,但它确实有效,但这次我一直收到一个我不明白的错误...
答案 0 :(得分:0)
利用apply()
info$wd <- apply(info[,c("wd.sps1","wd.sps2", "wd.genus","wd.family")],
1,function(x)na.omit(x)[1])
我确信它可以更有效地完成,但这是我想到的第一件事。
答案 1 :(得分:0)
此外,
indx <- which(!is.na(info[,-1]),arr.ind=T)
info$wd <- info[,-1][indx[!duplicated(indx[,1]),]]
info$wd
#[1] 0.6185 0.6185 0.6185 0.6185 0.8200 0.8200 0.3700 0.3700 0.3900 0.3900