【问题标题】:grouping multiple variables - R分组多个变量 - R
【发布时间】:2015-09-06 00:18:47
【问题描述】:

我想对不同主题和不同用户的数据框进行分组,以生成每个用户在该主题中的相对重要性表,例如我的数据框是

Topic User
A     U1
A     U2
B     U2
A     U1
B     U1
A     U1

我想把它减少到

Topic  User Importance
 A     U1    0.75
 A     U2    0.25
 B     U1    0.5
 B     U2    0.5

谁能指出我如何使用 R 最好是 dplyr?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    这是一个快速的data.table 替代方法

    library(data.table)
    setDT(df)[, as.data.table(table(User)/.N), by = Topic]
    #    Topic User    N
    # 1:     A   U1 0.75
    # 2:     A   U2 0.25
    # 3:     B   U1 0.50
    # 4:     B   U2 0.50
    

    这基本上只是按组运行table(User),然后按组大小划分.N


    或与dplyr类似

    df %>%
      group_by(Topic) %>%
      do(data.frame(table(.$User)/length(.$User)))
    
    # Source: local data frame [4 x 3]
    # Groups: Topic [2]
    # 
    #    Topic   Var1  Freq
    #   (fctr) (fctr) (dbl)
    # 1      A     U1  0.75
    # 2      A     U2  0.25
    # 3      B     U1  0.50
    # 4      B     U2  0.50
    

    【讨论】:

      【解决方案2】:

      处理此问题的一种方法是分别按主题/主题用户计数并加入结果:

      topic_count <- df %>% group_by(Topic) %>% summarise(total=n())
      user_count <- df %>% group_by(Topic, User) %>% summarise(cnt=n())
      
      user_count %>%
          left_join(topic_count, by="Topic") %>%
          mutate(Importance=cnt/total) %>%
          select(-cnt, -total) # Drop obsolete columns
      
      ##   Topic User Importance
      ## 1 A       U1       0.75
      ## 2 A       U2       0.25
      ## 3 B       U1       0.50
      ## 4 B       U2       0.50
      

      【讨论】:

        【解决方案3】:

        另一种方式:

        as.data.frame(prop.table(table(DF), margin = 1))
        #  Topic User Freq
        #1     A   U1 0.75
        #2     B   U1 0.50
        #3     A   U2 0.25
        #4     B   U2 0.50
        

        【讨论】:

        • 是的,由于某种原因已经被@RichardScrinven 发布并删除了
        • @DavidArenburg 抱歉,不知道;如果理查德取消删除,我会删除我的
        • 是的,我知道,你没有足够的代表看到这个(即使你对我的问题的回答很棒;))。我已经要求他取消删除,但他没有回应。
        猜你喜欢
        • 1970-01-01
        • 2021-09-19
        • 2019-03-01
        • 2017-06-16
        • 1970-01-01
        • 2018-05-13
        • 2023-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多