【问题标题】:grouping by and counting something in R [duplicate]R中的分组和计数[重复]
【发布时间】:2018-08-02 13:52:30
【问题描述】:

我正在使用 dplyr 尝试计算另一列具有的特定行数

所以它的输出会返回如下内容:

facebook 2  
hello.com 1  
news.com 1    
yahoo    1

类似于一个

select hostname, count(request)   
from data  
group by hostname

在 mysql 中。

我查看了dplyr 包,但不确定如何指定要分组的变量

编辑:数据来自 NASA 来自此链接的 http 请求 site

【问题讨论】:

  • 你可以做group_by(hostname),见the documentation中的例子。
  • 请不要通过图片提供您的数据。我们不能将其剪切并粘贴到 R 中,也没有人愿意再次输入。
  • 您应该能够通过table(df$hostname) 获得您正在寻找的答案 - 假设您的 data.frame 名为 df
  • 如果您更习惯 SQL 类型的查询,我会采用 data.table 方法。这是我发布的一个答案,它针对不同的问题说明了这一点:stackoverflow.com/questions/48170427/…

标签: r dplyr grouping


【解决方案1】:

这是data.table 方法。我使用您提供的数据来说明这个概念 - 今后请提供数据,以便其他人可以重现该问题(如 cmets 中所指出的那样)。

数据

library(data.table)
dt <- data.table(hostname = c("hello.com", "news.com", "facebook", "yahoo", "facebook"),
                 request = c("GET /blah/blah", "GET /hello", "GET /no", "GET /yes", "GET /hello"))

代码

> dt
    hostname        request
1: hello.com GET /blah/blah
2:  news.com     GET /hello
3:  facebook        GET /no
4:     yahoo       GET /yes
5:  facebook     GET /hello

> dt[, .N, by = hostname]
    hostname N
1: hello.com 1
2:  news.com 1
3:  facebook 2
4:     yahoo 1

这里的.Ndata.table 参数,它为您提供计数。您可以将其重命名为其他名称(以下示例中的“count”):

> dt[, .(count = .N), by = hostname]
    hostname count
1: hello.com     1
2:  news.com     1
3:  facebook     2
4:     yahoo     1

如果您希望每个条目都有多种可能性,例如facebook 或 facebook.com 或 facebook.co.uk,你需要我们正则表达式。在这种情况下,一个好的方法是按名称排序,然后使用grep 查找常见模式并按这些模式聚合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 2021-05-13
    • 2016-01-29
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多