【问题标题】:How to get elements with max values from list of values in R如何从R中的值列表中获取具有最大值的元素
【发布时间】:2020-01-21 22:25:36
【问题描述】:

您好,我有一个值列表,我只需要评分最高的元素,即 5。 所以对于下面的列表,我只需要有 5 个评级的电影名称。我不需要评级为 2 和 3 的电影。 我如何在 R 中做到这一点。

$Movie1
[1] 5

$Movie2
[1] 5

$Movie3
[1] 2

$Movie4
[1] 5

$Movie5
[1] 5

$Movie6
[1] 4

我需要结果

Movie1  Movie2  Movie4   Movie6
5         5       5        5

【问题讨论】:

  • 类似lst[sapply(lst, function(x) x > 3)]lst 是您的 list,这不包括 <3 的元素。
  • v <- unlist(your_list); v[v == 5]?
  • 试试mx <- max(unlist(lst1));Filter(function(x) x == mx, lst1)
  • unlist(lst[lst == 5])
  • @markus 这真的很有帮助。我能够得到想要的结果。但是,当我获得所有列的最大值时,该变量是整数,我将其转换为列表。我想知道是否必须将其取消列出,因此无需转换它。那么我们如何才能得到与整数相同的结果。我在下面详细提到了原始请求,以防您需要更多详细信息。

标签: r list data-science data-analysis


【解决方案1】:

第一步是取消列出您的列表,然后为评分最高的电影名称编制索引,然后将它们存储在数据框中。由于您并没有真正提供用例,因此很难确切知道为什么要使用这种格式,但我希望这里有一些可以帮助您入门的东西。

my_list <- list(movie1 = 5,    # a mock movie list
                movie2 = 5,
                movie3 = 2,
                movie4 = 5,
                movie5 = 4)


new <- do.call(rbind, my_list) # unlisting the elements into a df


t(
  data.frame( 
    movie = row.names(new)[new == max(new)],   # here we store row names of max rows
    num = max(new))                            # here we provide the max rating
  )                                            # finally, transpose `t()`

希望这会有所帮助。或者,您可以这样做以从类似列表中获取所需的文字输出:

my_list <- list(movie1 = 5,    # a mock movie list
                movie2 = 5,
                movie3 = 2,
                movie4 = 5,
                movie5 = 4)


new <- do.call(rbind, my_list) # unlisting the elements into a df

movie_names <- row.names(new)[new == max(new)]  # store all the movie names that have max rating
rep_num <- max(new)                             # store max rating (to pass to rep and eventually table
len <- length(movie_names)                      # len to pass to seq_len

table(sapply(seq_len(len), function(i){rep(movie_names[i], rep_num)})) # then finally create a function to repeat the movie name for the max rating and create a table from it. 

【讨论】:

  • 谢谢布伦南。所以原始请求如下。我希望这可以帮助您给出更好的答案。我拥有的数据集包含亚马逊客户给出的电影评论。数据字典:UserID – 4848 位客户,他们为每部电影 Movie 1 至 Movie 206 – 4848 位不同用户提供评级的 206 部电影提供评分。探索性数据分析:1)哪些电影的观看次数/收视率最高? 2) 每部电影的平均评分是多少?定义评分最高的前 5 部电影。 3) 定义观众最少的前 5 部电影
  • 所以我通过应用应用函数获得了所有列(电影)的最高评分。 apply(dataset,2,max,na.rm=TRUE) 现在我拥有所有具有最高评分的列(电影),但我们只需要那些具有最高评分的电影。因此,如果从应用功能我的答案是 Movie1 -5、Movie2 -3 等。我如何获得最高评分的电影。所以这里给出的最高评分是 5。
  • 这个链接有原始请求:) stackoverflow.com/questions/59849726/…
  • 嗨@Shikhar,鉴于你的第二条评论所说的,从你原来的问题来看,我在这里的工作不能解决这个问题吗?我很乐意继续提供帮助,但我需要了解以上内容是否有帮助。
  • 嘿布伦南。它确实有帮助,但我明确表示让您了解是否有更简单的方法来解决这个问题。您的解决方案相当有效,感谢您的帮助。我现在明白做了什么以及如何解决这个问题。
猜你喜欢
  • 2018-02-12
  • 2015-12-11
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 2016-01-21
相关资源
最近更新 更多