R 如何从循环后的几列中选择一行值?
我的“信息”数据框中有:R 如何从循环后的几列中选择一行值?,r,loops,min,R,Loops,Min,我的“信息”数据框中有: 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
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.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
我使用了一个类似的循环和一个不同的数据帧,它工作了,但这次我不断得到一个错误,我不明白 利用
apply()的方法
info$wd同样
indx别让我们悬而未决。怎么了?对不起!这实际上不是一个错误,而是一条警告信息。。。尽管如此,它并没有将这些值放入一个新的列中。这是一种真正更明智的方法!这让我的R编码看起来真的很蹩脚哈哈。。。谢谢回复!
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))))]
)
}
info$wd <- apply(info[,c("wd.sps1","wd.sps2", "wd.genus","wd.family")],
1,function(x)na.omit(x)[1])
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