Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >R组按总分类

R组按总分类
EN

Stack Overflow用户
提问于 2015-01-13 02:46:01
回答 3查看 6.1K关注 0票数 2

在R(我是相对较新的)中,我有一个由多个列和一个数字列组成的数据框架,我需要根据另一列确定的组进行聚合。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 SessionID   Price
 '1',       '624.99'
 '1',       '697.99'
 '1',       '649.00'
 '7',       '779.00'
 '7',       '710.00'
 '7',       '2679.50'

我需要按SessionID分组,并将每个数据帧的最大和最小值返回到原始数据框架中,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 SessionID   Price     Min     Max
 '1',       '624.99'   624.99  697.99
 '1',       '697.99'   624.99  697.99
 '1',       '649.00'   624.99  697.99
 '7',       '779.00'   710.00  2679.50
 '7',       '710.00'   710.00  2679.50
 '7',       '2679.50'  710.00  2679.50

有什么办法能有效地做到这一点吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-13 03:01:07

这是我使用aggregate的解决方案。

首先,加载数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df <- read.table(text = 
"SessionID   Price
'1'       '624.99'
'1'       '697.99'
'1'       '649.00'
'7'       '779.00'
'7'       '710.00'
'7'       '2679.50'", header = TRUE) 

然后aggregatematch返回到原来的data.frame

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tmp <- aggregate(Price ~ SessionID, df, function(x) c(Min = min(x), Max = max(x)))
df <- cbind(df, tmp[match(df$SessionID, tmp$SessionID), 2])
print(df)
#  SessionID   Price    Min     Max
#1         1  624.99 624.99  697.99
#2         1  697.99 624.99  697.99
#3         1  649.00 624.99  697.99
#4         7  779.00 710.00 2679.50
#5         7  710.00 710.00 2679.50
#6         7 2679.50 710.00 2679.50

编辑:如下所示,您可能会想知道为什么会这样做。这确实有点奇怪。但是请记住,data.frame只是一个花哨的list。尝试调用str(tmp),您将看到Price列本身是2乘2的数字矩阵。由于print.data.frame知道如何处理这个问题,所以print(tmp)看起来有3列,这让人感到困惑。无论如何,tmp[2]只需访问data.frame/list的第二个column/entry并返回该1列data.frame,而tmp[,2]则访问第二列并返回存储的数据类型。

票数 1
EN

Stack Overflow用户

发布于 2015-01-13 02:53:31

使用R基:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df <- transform(df, Min = ave(Price, SessionID, FUN = min),
                    Max = ave(Price, SessionID, FUN = max))
df
#  SessionID   Price    Min     Max
#1         1  624.99 624.99  697.99
#2         1  697.99 624.99  697.99
#3         1  649.00 624.99  697.99
#4         7  779.00 710.00 2679.50
#5         7  710.00 710.00 2679.50
#6         7 2679.50 710.00 2679.50

由于您想要的结果不是聚合的,而只是包含两个额外列的原始数据,所以您希望在基R中使用ave而不是aggregate,如果希望通过SessionID对数据进行aggregate,通常会使用SessionID。(注意: AEBilgrau显示,您也可以通过一些额外的匹配来进行聚合。)

同样,对于dplyr,您希望使用mutate而不是summarise,因为您不想聚合/汇总数据。

使用dplyr:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(dplyr)
df <- df %>% group_by(SessionID) %>% mutate(Min = min(Price), Max = max(Price))
票数 4
EN

Stack Overflow用户

发布于 2015-01-13 02:56:26

使用data.table包:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(data.table)

dt = data.table(SessionID=c(1,1,1,7,7,7), Price=c(624,697,649,779,710,2679))

dt[, c("Min", "Max"):=list(min(Price),max(Price)), by=SessionID]
dt
#   SessionId Price Min  Max
#1:         1   624 624  697
#2:         1   697 624  697
#3:         1   649 624  697
#4:         7   779 710 2679
#5:         7   710 710 2679
#6:         7  2679 710 2679

在您的情况下,如果您有一个data.frame df,只需执行dt=as.data.table(df)并使用上面的代码即可。

我对普通data.frame上解决方案的基准值感到好奇:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df = data.frame(SessionID=rep(1:1000, each=100), Price=runif(100000, 1, 2000))
dt = as.data.table(df)

algo1 <- function() 
{
    df %>% group_by(SessionID) %>% mutate(Min = min(Price), Max = max(Price))
}

algo2 <- function()
{
    dt[, c("Min", "Max"):=list(min(Price),max(Price)), by=SessionID]
}

algo3 <- function()
{
    tmp <- aggregate(Price ~ SessionID, df, function(x) c(Min = min(x), Max = max(x)))
    cbind(df, tmp[match(df$SessionID, tmp$SessionID), 2])
}

algo4 <- function()
{
    transform(df, Min = ave(Price, SessionID, FUN = min), Max = ave(Price, SessionID, FUN = max))
}   



#> system.time(algo1())
#   user  system elapsed 
#   0.03    0.00    0.19 

#> system.time(algo2())
#   user  system elapsed 
#   0.01    0.00    0.01 

#> system.time(algo3())
#   user  system elapsed 
#   0.77    0.01    0.78 

#> system.time(algo4())
#   user  system elapsed 
#   0.02    0.01    0.03 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27920295

复制
相关文章
谷歌发现黑客新工具,可窃取Gmail、雅虎、Outlook等电子邮件账户
8月23日消息,谷歌威胁分析小组(TAG)发现,名为Charming Kitten的伊朗政府支持团体,在其恶意软件库中增加了一个新工具,可以从Gmail、雅虎和微软Outlook账户中检索用户数据。 谷歌将该工具称为HYPERSCRAPE,该工具在2021年12月首次被发现。据说伊朗用这个开发中的软件入侵了二十余个帐户,已知最早的样本可以追溯到2020年。 Charming Kitten是一个高度活跃的高级持续性威胁(APT),据信与伊朗的伊斯兰革命卫队(IRGC)有关,曾参与过与政府利益一致的间谍活动。
FB客服
2023/03/30
1.2K0
谷歌发现黑客新工具,可窃取Gmail、雅虎、Outlook等电子邮件账户
“HTTPS”安全在哪里?
背景 最近基于兴趣学学习了下 HTTPS 相关的知识,在此记录下学习心得。 在上网获取信息的过程中,我们接触最多的信息加密传输方式也莫过于 HTTPS 了。每当访问一个站点,浏览器的地址栏中出现绿色图标时,意味着该站点支持 HTTPS 信息传输方式。我们知道 HTTPS 是我们常见的 HTTP 协议与某个加密协议的混合体,也就是 HTTP+S。这个 S 可以是 TLS(安全传输层协议)、也可以是 SSL(安全套接层),不过我更认可另一个抽象概括的说法,HTTP+Security。不过要谈论 HTTPS 为何
腾讯Bugly
2018/03/23
1.3K0
“HTTPS”安全在哪里?
Infoga:一款针对电子邮件的公开资源情报工具
Infoga是一款针对针对电子邮件的公开资源情报工具(OSINT),该工具能够从各种公开源(搜索引擎、PGP密钥服务器和Shodan)收集电子邮件帐号信息,其中包括IP地址、主机名和国家信息等,并使用haveibeenpwned.com API来检测目标电子邮件是否泄漏。该工具是一个简单且强大的工具,该工具在渗透测试的早期阶段作用非常大,你也可以使用该工具来了解你们公司在互联网上的知名度。
FB客服
2023/02/16
6730
Infoga:一款针对电子邮件的公开资源情报工具
『网络安全』使用 PGP 实现电子邮件安全
从网上下载了 "PGP_Desktop_win32_10.0.3" 版,解压后有如下文件:
独立观察员
2022/12/06
3K0
『网络安全』使用 PGP 实现电子邮件安全
史上最大安全漏洞案和解,雅虎向2亿用户赔偿3.5亿元
10月24日消息,据NBC News报道,雅虎已经同意向2亿用户支付5000万美元(约合3.47亿元人民币)赔偿金,并为他们提供为期两年的免费信用监控服务。在此前发生的、有史以来最大的安全漏洞案中,这些人的电子邮件地址和其他个人信息被盗。
FB客服
2018/11/22
3670
OpenSSL心脏出血漏洞全回顾
近日网络安全界谈论的影响安全最大的问题就是Heartbleed漏洞,该漏洞是4月7号国外黑客曝光的。据Vox网站介绍,来自Codenomicon和谷歌安全部门的研究人员,发现OpenSSL的源代码中存在一个漏洞,可以让攻击者获得服务器上64K内存中的数据内容。该漏洞在国内被译为” OpenSSL心脏出血漏洞”,因其破坏性之大和影响的范围之广,堪称网络安全里程碑事件。 OpenSSL心脏出血漏洞的大概原理是OpenSSL在2年前引入了心跳(heartbeat)机制来维持TLS链接的长期存在,心跳机制是作为TL
FB客服
2018/02/02
2.3K0
如何看待目前浮躁的信息安全圈?
比如,安全媒体平台上的文章质量也在提高。那些对自己多少有要求的人来说,还是会长点心积累自己的。
糖果
2021/07/19
3490
我在雅虎获得的 8 个最好的职业建议
我在雅虎获得的 8 个最好的职业建议 最近,我和我的同事有一个有趣的讨论。我们回顾了各自的工作历史,以及我们“丰富多彩”的个性是否对我们长远发展造成了负面影响。事实是,我刚出大学校门的时候,比较混。我傲慢又尖刻,有着一般人不会喜欢的性格。我自以为无所不知,我骄傲得简直已经目中无人了。 我有一个习惯就是告诉经验更丰富的工程师他们做错了事情,尽管大多数时间我说的才是对的,但是我的人格魅力还不能让他们听我的。在又一次我说他们做错了的时候,其中一个高级工程师停下来说,“如果你再不闭嘴,我会把你揍得屁滚尿流。”我一笑
用户1289394
2018/02/27
7050
我在雅虎获得的 8 个最好的职业建议
雅虎日本的无密码认证
雅虎日本是日本最大的媒体公司之一,提供搜索、新闻、电子商务和电子邮件等服务。每月有超过5000万用户登录雅虎日本的服务。
智影Yodonicc
2022/05/12
1.3K0
雅虎日本的无密码认证
针对微软企业电子邮件服务,大规模网络钓鱼攻击来袭
近期,来自ThreatLabz的安全研究人员发现了一批大规模的网络钓鱼活动,该活动使用中间人攻击 (AiTM) 技术以及多种规避策略。据该公司本周二发布的一份公告,上个月微软遭遇的一次网络钓鱼攻击中似乎也使用了这种中间人攻击技术。ThreatLabz还透露,从Zscaler 云收集的情报分析,6月的大规模网络攻击中使用高级网络钓鱼工具包的情况有所增加,而使用这项新攻击技术的钓鱼活动也在增加。 据分析,这些网络钓鱼活动和微软发现的活动如出一辙,它们不但使用AiTM绕过多因素身份验证 (MFA),还在攻击的各个
FB客服
2023/03/30
3540
针对微软企业电子邮件服务,大规模网络钓鱼攻击来袭
重磅发布 | 安恒于世界互联网大会首次发布“邮箱安全综合解决方案”
邮箱系统在互联网中扮演着重要的角色,个人、企业、政府等用户将邮箱系统作为通讯、传输文件的重要组成部分。邮箱系统保存着政府、党政机关、各企事业单位的大量敏感信息。对于一些涉密部门,更是经常成为被攻击的目标,通过攻陷邮箱系统来获取企业、政府敏感信息,以及敏感文件,特别是邮箱跨站、挂马、欺骗等已经成为邮箱攻击的最常使用的手段。 触目惊心的邮箱 一 俄罗斯2 亿电子邮件账号被售卖 2016 年5 月,在俄罗斯黑市上,大约有超过 2.72 亿个被盗的电子邮箱和其他网站登录凭证被售卖,其中大部分是俄罗斯本地的电子邮箱服
安恒信息
2018/04/10
8190
重磅发布 | 安恒于世界互联网大会首次发布“邮箱安全综合解决方案”
python的第三方库在哪里_第三方付款情况说明
近期开始补习各种Python的知识,看着网上大神们python用得出神入化轻舞飞扬,虽然跟着一起安装了几十个第三方库却不会怎么用,这就尴尬了,网上找了一圈没有一个明说的,遂写此文。
全栈程序员站长
2022/11/08
3000
针对 QUIC协议的客户端请求伪造攻击
QUIC(Quick UDP Internet Connection)是谷歌制定的一种基于UDP的低时延的互联网传输层协议。随着最近的标准化和各大型科技公司的兴趣日益浓厚,QUIC 协议获得越来越多的关注。本研究对从QUIC设计中产生的客户端请求伪造攻击进行了初步分析。目前相关脚本已开源:https://github.com/yurigbur/QUICforge 本研究分析了三种请求伪造攻击模式,并了解它们如何用于协议假冒攻击和流量放大攻击。然后,探索了各个协议消息的可控攻击空间,并证明其中一种攻击模式可以
FB客服
2023/05/12
1.5K0
针对 QUIC协议的客户端请求伪造攻击
Django 使用第三方服务发送电子邮件
  在 Django 网站中使用 mailgun 的邮件收发服务。 1.在 mailgun 官网上注册个账号(免费,免费账号每个月有10000条收发邮件的服务,对我来说已经完全够用了),注册完成后界面
希希里之海
2018/07/05
2K0
假冒App引发的新网络钓鱼威胁
网络钓鱼(即假的,恶意的电子邮件)常常被人鄙视。在全球聚焦于网上的“零日漏洞攻击”(zero days)、网络“武器”和“动能”网络攻击的时候,网络钓鱼电子邮件似乎是过时、几乎是二流的概念。
Alicia
2018/07/23
1.2K0
2023年度电子邮件安全报告
概述 2022年,网络安全威胁呈指数级增长,其中绝大多数涉及网络钓鱼也就不足为奇了。随着威胁的频率、强度和复杂性的增加,对快速和可操作性情报的需求也达到前所未有的高度。 Cofense Intelligence研究发现恶意钓鱼电子邮件增加了569%,与证书/凭据钓鱼相关的活跃威胁报告增加了478%,恶意软件增加了44%。基于这些数据,Cofense得出结论,凭据网络钓鱼是2022年的首要网络威胁。 【图1:活跃威胁报告中的顶级主题】 如上图所示,在活跃威胁报告中,占比最大的主题是金融(37%),紧随其
FB客服
2023/04/18
1.1K0
2023年度电子邮件安全报告
详解OpenSSL重大漏洞
近日有研究人员公布,广为流行的网络加密软件OpenSSL存在名为Heartbleed的重大漏洞,人们的账号密码、信用卡号码等个人信息可能会 失窃。各大主流网站都在加紧解决这一问题。究竟是什么回事呢?普
安恒信息
2018/04/10
1.5K0
详解OpenSSL重大漏洞
用于绕过安全电子邮件网关的特制ZIP文件
攻击者一直在寻找新的技巧来分发恶意软件,而不会被防病毒扫描程序和电子邮件网关检测到。这在一个新的网络钓鱼活动中得到了实现,该活动利用了特制的ZIP文件,该文件旨在绕过安全的电子邮件网关来分发NanoCore RAT。
FB客服
2019/12/03
1.3K0
字符串在JVM的哪里
另外String提供了一个API, java.lang.String.intern(),这个API可以手动将一个字符串对象的值转移到字符串常量池中
名字是乱打的
2022/05/13
4.4K0
字符串在JVM的哪里
架构 | 目前在企业架构中流行的技术
软件开发技术日新月异,流行的技术三五年就换一茬,目前在企业架构中都流行哪些技术呢? Spring Boot 采用约定优于配置的原则实现的一个可以快速搭建项目的框架,搭建一个WEB服务器也就是分分钟的
码神联盟
2018/04/02
9130
架构 | 目前在企业架构中流行的技术

相似问题

Orchard CMS自定义小部件视图

11

如何导入小部件-- Orchard CMS

13

Orchard CMS小部件显示类型

12

Orchard CMS相关帖子小部件

21

Orchard CMS:未显示内容部件

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文