2017-08-31 10 views
0

私は2つの列の間の欠損値を持つ韓国では、次のデータがあります:私は果物の名前を印刷する必要が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

に変更して欠損値を定義し、 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") 
関連する問題