【问题标题】:In R, what is a good way to aggregate String data在R中,聚合字符串数据的好方法是什么
【发布时间】:2010-10-25 17:49:38
【问题描述】:

在 R(或 S-PLUS)中,什么是在数据框中聚合字符串数据的好方法?

考虑以下几点:

myList <- as.data.frame(c("Bob", "Mary", "Bob", "Bob", "Joe"))

我希望输出是:

 [Bob,  3
  Mary, 1
  Joe,  1]

目前,我知道如何做到这一点的唯一方法是使用摘要功能。

> summary(as.data.frame(myList))

 Bob :3                                
 Joe :1                                
 Mary:1      

这感觉就像一个黑客。任何人都可以提出更好的方法吗?

【问题讨论】:

    标签: r statistics s-plus


    【解决方案1】:

    使用table,无需排序:

    ctable <- table(myList);
    counts <- data.frame(Name = names(ctable),Count = as.vector(ctable));
    

    【讨论】:

    • 您可以将最后一行简化为 as.data.frame(ctable) 请注意,只有在一行中放置多个命令时才需要分号。
    【解决方案2】:

    这是上述答案的组合(如 Thierry 所建议的)

    data.frame(table(myList[,1]))
    

    给你

      Var1 Freq
    1  Bob    3
    2  Joe    1
    3 Mary    1
    

    【讨论】:

    • 它给了我一个错误 - 基于蒂埃里的建议的一个班轮将是:as.data.frame(table(myList))
    • 这很有趣。你收到什么样的错误信息?我刚刚试了一下,没有收到错误消息。
    • 从头开始 - 我在将 myList 定义为列表而不是 data.frame 后尝试过
    【解决方案3】:

    你的意思是这样吗?

    myList <- c("Bob", "Mary", "Bob", "Bob", "Joe")
    r <- rle(sort(myList))
    result <- as.data.frame(cbind(r$values, r$lengths))
    names(result) <- c("Name", "Occurrences")
    result
      Name Occurrences
    1  Bob           3
    2  Joe           1
    3 Mary           1
    

    【讨论】:

      【解决方案4】:

      使用data.table

      myList <- data.frame(v1=c("Bob", "Mary", "Bob", "Bob", "Joe"))
      library(data.table)
           v1 N
      1:  Bob 3
      2: Mary 1
      3:  Joe 1
      

      【讨论】:

        【解决方案5】:

        使用sqldf 库:

        require(sqldf)
        
        myList<- data.frame(v=c("Bob", "Mary", "Bob", "Bob", "Joe"))
        sqldf("SELECT v,count(1) FROM myList GROUP BY v")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-02-21
          • 2014-04-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-24
          相关资源
          最近更新 更多