2017-08-31 66 views
0

我有韓國下列數據有兩列之間的缺失值名稱:which.min和which.max輸出相同的由於缺少價值

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 

我需要打印水果的名稱從最小值到最大值。我有這樣的:

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

的問題是,因爲有韓國的蘋果和香蕉之間的缺失值,這就是它打印:

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

我希望它看起來像這樣:

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

尋找最小值和最大值以及價格作爲字符對我來說也是一個問題 - 「韓國」的兩個可用值也是相同的,所以min = max – Cath

+2

將「」更改爲「NA」以定義您的缺失值並修改100到50爲韓國的價值之一(以避免綁定),它會工作...問題不是真正的缺失值,但你如何定義缺失值(=作爲字符,將整個矩陣轉換爲字符) – Cath

+1

感謝您花時間閱讀我的問題。我非常感激。是的,修改100到50是可行的,但我必須在兩個分數相同的情況下工作。 –

回答

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

這是醜陋的,但應該做你在找什麼:

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