2017-08-31 37 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")