首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对R中的内容进行分组和计数

对R中的内容进行分组和计数
EN

Stack Overflow用户
提问于 2018-02-23 00:08:55
回答 1查看 71关注 0票数 0

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

因此,此命令的输出将返回类似以下内容:

代码语言:javascript
复制
facebook 2  
hello.com 1  
news.com 1    
yahoo    1

它类似于

代码语言:javascript
复制
select hostname, count(request)   
from data  
group by hostname

在mysql中。

我看过dplyr包,但不确定如何指定要按哪个变量进行分组

编辑:数据来自美国国家航空航天局的http请求,来自此链接site

EN

回答 1

Stack Overflow用户

发布于 2018-02-23 00:56:12

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

DATA

代码语言:javascript
复制
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"))

代码

代码语言:javascript
复制
> 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

这里的.N是给出计数的data.table参数。您可以将其重命名为其他名称(以下示例中的“count”):

代码语言:javascript
复制
> 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查找通用模式并按这些模式进行聚合。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48932067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档