0

このRコードの何が問題なのか理解できません.測定またはNAを含むいくつかの行と列があり、基本的に、いくつかの列の中から各行の最小値と最大値を取得したい:

require(plyr)

census <- read.csv("sps_census.csv")
info <- read.csv("sps_info.csv")


for (i in 1: nrow(census)) {
  trans <- census[i,c("dbh1","dbh2","dbh3","dbh4","dbh5","dbh6","dbh7","dbh8", "dbh9")]
  index.1 <- which (trans != "NA") #some NAs are in the data
  census$min.dbh <- min(trans[1,index.1])
  census$min.dbh.index <- min(index.1)
  census$max.dbh <- max(trans[1,index.1])
  census$max.dbh.index  <- max(index.1)
}
4

2 に答える 2

2

この行 (および他の 3 つの同様の行) では:

census$min.dbh <- min(trans[1,index.1])

列全体をすべて同じ値に割り当てています。明らかにあなたが意図したものではありません。

おそらく、次のようなものが必要です。

census$min.dbh[i] <- min(trans[1,index.1])

applyこの種のことを行うために使用できることに注意してください。apply例のデータを提供する (つまり、質問を再現可能な例にする) と、誰かが実際の例を書くのがずっと簡単になります。

于 2013-03-23T19:56:59.470 に答える
0

使用できますapply

index <- c"dbh1","dbh2","dbh3","dbh4","dbh5","dbh6","dbh7","dbh8", "dbh9") #or paste("dbh",1:9,sep="")

census$min.dbh <- apply(census[index], 1, min, na.rm=T)
census$min.db.index <- apply(census[index], 1, function(x){ min(which(!is.na(x))) })
census$max.dbh <- apply(census[index], 1, max, na.rm=T)
census$max.db.index <- apply(census[index], 1, function(x){ max(which(!is.na(x))) })

is.na(x)の代わりに を使用していることに注意してくださいx != "NA"

于 2013-03-23T21:42:58.170 に答える