返回具有某个列的最大值的行的名称

时间:2017-04-16 01:10:24

标签: r dataframe

我正在编写一个具有器具参数的函数,但实际上使用下面的数据框返回以最高成本销售的品牌名称

   utensil cost brand
1  pen     1    a
2  pencil  2    b
3  pen     5    c
4  pen     6    d
5  pencil  2    e

3 个答案:

答案 0 :(得分:0)

这是您提供的数据:

data <- structure(list(utensil = structure(c(1L, 2L, 1L, 1L, 2L), .Label = 
c("pen", 
"pencil"), class = "factor"), cost = c(1L, 2L, 5L, 6L, 2L), brand = 
structure(1:5, .Label = c("a", 
"b", "c", "d", "e"), class = "factor")), .Names = c("utensil", 
"cost", "brand"), row.names = c(NA, -5L), class = "data.frame")

你不需要这个功能,但是如果你坚持这个,这个功能需要data.frame和器具,并回赠最昂贵的品牌。我这样构建它的原因是你可以实际遵循流程,然后可能编写自己的代码。否则,提到的d.b是在r。

中有效(更好)的方法
maxcost = function(df, ut)
{


  filtered <- subset(df, df$utensil == ut)
  brand_df <- filtered[which.max(filtered$cost),]
  brand <- as.character(brand_df[,3]) 

  return(brand)
}

这是一个测试:

>maxcost(df, "pen")
[1] "d"

答案 1 :(得分:0)

你可以这样做

{{1}}

答案 2 :(得分:0)

此功能可以解决您的问题

dados = data.frame(utensil = c('pen', 'pencil', 'pen', 'pen', 'pencil'),
                   cost = c(1,2,5,6,2),
                   brand = c('a','b','c','d','e'))


verify = function(utensil, dados){

  selected = dados[dados$utensil == utensil,]

  result <- as.character(selected[which.max(dados[dados$utensil == utensil, 'brand']),'brand'])

  return(result)
}