2017-08-31 2 views
0

ich folgende Daten mit Korea mit einem fehlenden Wert zwischen zwei Spalten:Der Name which.min und which.max Ausgang der gleiche Wert aufgrund fehlenden

canada <- c(100, 0, 100) 
korea <- c(100, "", 100) 
brazil <- c(100, 90, 100) 
fruit <- rbind(canada, korea, brazil) 
colnames(fruit) <- c("apple", "orange", "banana") 
fruit 

Ich brauche die Namen der Früchte drucken vom minimalen Wert bis zum maximalen Wert. Ich habe dies:

price <- function(val){ 
    # General Functions ---- 
    val <- tolower(val) 
    myrow <- fruit[val,] 
    nation <- tools::toTitleCase(val) 

    name.min <- names(myrow)[which.min(c(myrow))] 
    name.max <- names(myrow)[which.max(c(myrow))] 

    cat(paste0("There is an 'NA' between two columns: ", name.min, " ", name.max)) 
} 

Das Problem ist, dass, weil es ein fehlender Wert zwischen Korea Apfel und Banane ist, das ist, was er druckt:

> price("korea") 
There is an NA between two columns: apple apple 

Ich mag es so aussehen:

> price("korea") 
There is an NA between two columns? No problem: apple banana 
+2

Suche nach Min- und Max-Werten mit Preisen als Zeichen scheint auch ein Problem für mich - auch beide verfügbaren Werte für "Korea" sind sowieso gleich, also min = max – Cath

+2

ändern Sie "" zu NA, um Ihren fehlenden Wert zu definieren und zu ändern 100 bis 50 für einen der Werte von Korea (um zu vermeiden gebunden) und es wird funktionieren ... Problem ist nicht wirklich mit dem fehlenden Wert, sondern wie Sie den fehlenden Wert definiert (= als Zeichen, konvertieren Sie Ihre gesamte Matrix zu einem Zeichen) – Cath

+1

Danke, dass Sie sich die Zeit genommen haben, meine Frage zu lesen. Ich schätze es sehr. Ja, das Modifizieren von 100 zu 50 würde funktionieren, aber ich werde arbeiten müssen, wenn beide Punkte gleich sind. –

Antwort

0
price <- function(val){ 
    val <- tolower(val) 
    myrow <- fruit[val,] 
    nation <- tools::toTitleCase(val) 

    name.min <- names(myrow)[which.min(c(myrow))] 
    name.max <- names(which(myrow == max(myrow))) 

    cat(paste0(name.max)) 
} 

> price("korea") 
apple banana 
1

Diese hässlich ist, aber sollte das tun, was Sie suchen,:

price <- function(x) { 
    temp <- data.frame(val = as.numeric(fruit[rownames(fruit)==x,]), 
        name = colnames(fruit)) 
    ind <- which(is.na(temp[,1])) 
    if (length(ind!=0)) temp <- temp[-ind,] 
    temp[order(temp[,1]),2] 
} 

price("korea") 
Verwandte Themen