【问题标题】:count multiple strings in R, group by those strings计算R中的多个字符串,按这些字符串分组
【发布时间】:2017-11-13 05:34:43
【问题描述】:

我有一个这样的data.frame:

Points      Assists      Steals
Player A    Player B     Player B
Player B    Player C     Player A
player C    Player C     Player A

我正在尝试获得这样的 data.frame 输出:

           Points     Assists      Steals
Player A    1          0            2
Player B    1          1            1
Player C    1          2            0

如您所见,我希望它计算每个玩家出现在每个类别中的次数。我可以使用table() 为一列执行此操作,但不知道如何为多列执行此操作。我该怎么做?

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以将gather 转换为长格式,将countspread 转换为宽格式

    library(dplyr)
    library(tidyr)
    gather(df1) %>% 
         count(key, value) %>%
         spread(key, n, fill = 0)
    # A tibble: 3 x 4
    #     value Assists Points Steals
    #*    <chr>   <dbl>  <dbl>  <dbl>
    #1 Player A       0      1      2
    #2 Player B       1      1      1
    #3 Player C       2      1      0
    

    或者我们使用melttable

    library(reshape2)
    table(melt(as.matrix(df1))[3:2])
    #         Var2
    #value      Points Assists Steals
    #  Player A      1       0      2
    #  Player B      1       1      1
    #  Player C      1       2      0
    

    数据

    df1 <- structure(list(Points = c("Player A", "Player B", "Player C"), 
    Assists = c("Player B", "Player C", "Player C"), Steals = c("Player B", 
    "Player A", "Player A")), .Names = c("Points", "Assists", 
    "Steals"), class = "data.frame", row.names = c(NA, -3L))
    

    【讨论】:

    • 是否有 data.table 方法可以做到这一点?我不确定我会怎么做。我喜欢桌子融化的方式,简单而聪明
    • @denis 谢谢。你可以做dcast(melt(setDT(df1, keep.rownames = TRUE)[], id.var = 'rn'), value ~variable)
    【解决方案2】:

    这里是 data.table 包的 akrun 解决方案的详细信息。可能只有一行,但我将其扩展为几个可以理解的步骤。

    library(data.table)
    DT <- setDT(df1)
    DT[,id := 1:.N]
    plouf <- melt(DT, id.var = c("id"))
    dcast(plouf, value ~variable)
    

    给予

          value Points Assists Steals
    1: Player A      1       0      2
    2: Player B      1       1      1
    3: Player C      1       2      0
    

    【讨论】:

      猜你喜欢
      • 2017-03-23
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      • 2019-09-14
      相关资源
      最近更新 更多