【问题标题】:how to filter data frame with conditions of many columns如何过滤具有多列条件的数据框
【发布时间】:2021-08-08 12:43:30
【问题描述】:

更新!!! 在尝试了评论中的代码之后。 结果显示了所有brand_id,review_score为5(最高分)。 虽然也有超过 10 条评论的数千个品牌 ID...

所以我仍然对此感到困惑

问题是我得到了一个包含许多列的数据框,我需要为不同的列找到具有不同条件的品牌。

这是数据框:

Brand id Brand name review score
1 A 1.0
2 B 2.0
2 B 3.0
3 C 1.0
3 C 1.5
3 C 2.0

并且我需要获得最高评分的商品的品牌 ID 是什么?还要过滤超过 10 条评论的商品?

我试过这样的代码:

item %>%  
  group_by(Brandid, review_score) %>%
  summarise(idnumber = n()) %>%
  filter(idnumber > 10)%>%
  arrange(desc(review_scode))

我试过了,也失败了..

item %>%
  group_by(Brand_id) %>%
  mutate(n = n(), 'max' = max(review_overall, na.rm = TRUE))%>%
  filter(n >= 10) %>%
  arrange(desc('max'))

然后我得到了许多具有相同 review_scode 的项目... 但似乎这个问题应该只有一个答案。

那么你能帮帮我吗!

谢谢!

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    使用此代码,您可以获得每个品牌的最大 review_score。 使用add_count,您可以获得每个品牌的计数。

    没有列review_overall: 也许你可以澄清一下:

    library(dplyr)
    df %>% 
        group_by(Brand_name) %>% 
        add_count() %>% 
        filter(review_score == max(review_score))
    

    如果您也想过滤n,请使用以下代码:

    df %>% 
        group_by(Brand_name) %>% 
        add_count() %>% 
        filter(review_score == max(review_score & n > 10))
    

    输出:

      Brand_id Brand_name review_score     n
         <int> <chr>             <dbl> <int>
    1        1 A                     1     1
    2        2 B                     3     2
    3        3 C                     2     3
    

    【讨论】:

    • 感谢您的评论!但似乎这段代码没有【过滤超过 10 条评论的商品】
    • 嗨。 10条评论是什么意思。总分或...
    • 是的。你可以在我的脑海里,但我不确定。请告诉我它是否有效。
    • 你好,我想是评论的数量!
    • 谢谢!!!也许我需要sum() .. 我会考虑的!谢谢你的帮助!!!
    猜你喜欢
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    相关资源
    最近更新 更多