首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据与另一个变量的值重复变化的变量排列ids

根据与另一个变量的值重复变化的变量排列ids
EN

Stack Overflow用户
提问于 2022-10-07 16:34:59
回答 1查看 27关注 0票数 0

假设我有一个数千产品的数据集。对于所有的产品,我都知道它们在main_rating_platform上是如何评级的,在alternative_rating_platform上是如何被评级的。碰巧的是,这些产品在alternative_rating_platform上的平均评级更差。这是数据集的一个小示例:

代码语言:javascript
复制
df <- data.frame(product_id=c("a2a","zyz","xyz","9io","rop"), 
                 main_rating_platform = c(4.07,3.99,4.81,3.71,3.99),
                 alternative_rating_platform = c(3.67,3.59,4.21,3.71,3.67))

我的最终目标是根据对product_ids进行main_rating_platform排名,但只根据alternative_rating_platform的评级对这个特定产品进行评级。

我试过的,现在知道该怎么做的是:(是的,我想用同样等级的产品,当它们有相同的评级时:)

代码语言:javascript
复制
library(dplyr)
df <- df %>% mutate(ranking_mainplatform = dense_rank(desc(main_rating_platform )))
df <- df %>% mutate(ranking_alternativeplatform = dense_rank(desc(alternative_rating_platform)))

但这不是我需要的。我想知道,如果product_id a2a按照alternative_rating_platform的评级进行评级,那么它的排名会是什么?而其他所有产品都将与main_rating_platform的评级一样。例如,突然之间,产品a2a (而不是4.07 )将被评为3.67星级。而不是第二好的产品,它实际上是最坏的,因此排名第5。

这应该是我希望最终得到的变量:

代码语言:javascript
复制
df$newranking_for_this_product_on_main_platform_but_with_rating_from_alternative_platform_ceterisparibus <- c(5,5,1,4,5)

我挣扎着让我的头绕着圈转。如果有一个没有循环的解决方案,并且在计算上对大数据是友好的,那就太好了。但是如果循环在这里是必须的,那么它就是=)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-07 17:46:15

这可能不是很好的扩展,因为您最终要在每一行迭代两次(即使没有显式的循环,在幕后也有)。基本上,在下面的代码中,它会遍历每个product_id并创建一个新的评级列表,该列表只是在该行的替代评级中添加。然后,它返回并计算这个次级1列表的排名。

代码语言:javascript
复制
library(dplyr)
library(purrr)

df <- data.frame(product_id=c("a2a","zyz","xyz","9io","rop"), 
                 main_rating_platform = c(4.07,3.99,4.81,3.71,3.99),
                 alternative_rating_platform = c(3.67,3.59,4.21,3.71,3.67))



df <- df |> 
  mutate(sub1Ratings = map(
    seq_along(product_id), 
    function(i, main, alt) {
      main[i] <- alt[i]
      main
    }, 
    main = main_rating_platform, 
    alt = alternative_rating_platform
  ))|> 
  mutate(
    sub1Rank = imap(sub1Ratings, ~dense_rank(desc(.x))[.y])
  ) 


as.integer(df$sub1Rank)
#> [1] 4 5 1 4 5

由于dense_rank如何处理领带,产出排名并不完全符合您在问题中的要求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73990156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档