2013-03-23 4 views
0

Я не могу inderstand, что не так с этим кодом R, у меня есть несколько строк и седловина с measuament или NA, и я в основном хотят, чтобы получить минимальную и максимальное значение в каждой строке поиск amongs несколько перевалов:Что не так с этим циклом?

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) 
} 
+0

Вам будет проще получить ответ, если вы отметили свой вопрос с использованием имени языка, которое вы используете. – Voitcus

+0

Упс, это R. –

+0

какое сообщение об ошибке вы получаете? –

ответ

2

в этой строке (и три других подобных линий):

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

вы присваивающие весь столбец, вся ту же стоимость. Ясно, что вы не намерены.

Может быть, вы хотите что-то вроде этого:

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

Заметьте, что вы можете использовать apply делать такого рода вещи. Было бы намного проще, если бы кто-нибудь написал рабочий пример apply, если вы предоставите примерные данные (т. Е. Сделайте свой вопрос воспроизводимым примером).

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".

+0

Пакет matrixStats имеет функции 'rowMins' и' rowMaxs' (и множество подобных полезных функций), которые здесь удобны. – cbeleites

Смежные вопросы