Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在使用plyr包和处理列表时遇到问题

在使用plyr包和处理列表时遇到问题
EN

Stack Overflow用户
提问于 2013-01-21 13:21:30
回答 3查看 441关注 0票数 5

我很难理解plyr包的用法。我尝试使用它来拆分存储在列表中的数据帧,应用一个函数,将结果存储为数据帧,然后将数据帧重新组合为列表。因此,给出以下数据:

代码语言:javascript
运行
AI代码解释
复制
    #create test dfs
    df1<-data.frame(a=sample(1:50,10),b=sample(1:50,10),c=sample(1:50,10),d=(c("a","b","c","a","a","b","b","a","c","d")))
    df2<-data.frame(a=sample(1:50,9),b=sample(1:50,9),c=sample(1:50,9),d=(c("e","f","g","e","e","f","f","e","g")))
    df3<-data.frame(a=sample(1:50,8),b=sample(1:50,8),c=sample(1:50,8),d=(c("h","i","j","h","h","i","i","h")))

    #make them a list
    list.1<-list(df1=df1,df2=df2,df3=df3)

我想计算在每个数据帧的d中定义的每个组的平均值。如果我只在一个dataframe上使用plyr (按组计算特定列的平均值),那么使用plyr包的可能性是:

代码语言:javascript
运行
AI代码解释
复制
    ddply(df1,.(d),summarise, mean=mean(a))

但是如何将它应用于数据帧中的每一列和列表中的每一数据帧呢?我如何重新组合所有的数据,以便最终得到一个包含结果的矩阵的列表?对于这个非常基本的问题,我很抱歉,但我是R的新手,我已经尝试解决这个问题很长一段时间了……谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-21 13:58:38

这是一个结合了llply()ddply()的解决方案。首先,llply()将对列表中的每个元素应用函数,并返回一个列表。然后对列表中的每个数据帧应用ddply(),并按列d划分每个数据帧。函数colMeans()用于计算每个数值列的平均值。

代码语言:javascript
运行
AI代码解释
复制
llply(list.1,function(x) ddply(x,.(d),function(x) colMeans(x[,1:3])))
$df1
  d        a     b        c
1 a 22.25000 26.25 34.25000
2 b 19.66667 22.00 28.66667
3 c 37.00000 44.50 18.00000
4 d 17.00000  3.00  4.00000

$df2
  d        a        b    c
1 e 20.50000 32.25000 18.5
2 f 25.33333 34.33333 21.0
3 g 20.50000 26.50000 16.5

$df3
  d    a        b        c
1 h 17.5 26.50000 37.25000
2 i 45.0 22.33333 26.33333
3 j 25.0 33.00000 42.00000
票数 1
EN

Stack Overflow用户

发布于 2013-01-21 13:30:56

您需要将所有数据放入一个大的data.frame

代码语言:javascript
运行
AI代码解释
复制
library(reshape)

big_dataframe = ldply(list.1, function(x) melt(x, id.vars = "d"))
> head(big_dataframe)
  .id d variable value
1 df1 a        a    44                                                      
2 df1 b        a    17                                                      
3 df1 c        a    15                                                      
4 df1 a        a    30                                                      
5 df1 a        a    49                                                      
6 df1 b        a    33

...and然后对它使用ddply

代码语言:javascript
运行
AI代码解释
复制
res = ddply(big_dataframe, .(.id, d, variable), summarise, mn = mean(value))
> res
   .id d variable       mn
1  df1 a        a 40.00000                                                  
2  df1 a        b 25.25000                                                  
3  df1 a        c 31.25000                                                  
4  df1 b        a 22.66667                                                  
5  df1 b        b 16.00000                                                  
6  df1 b        c 26.00000                                                  
7  df1 c        a  9.00000                                                  
8  df1 c        b 16.50000                                                  
9  df1 c        c 15.00000                                                  
10 df1 d        a 28.00000                                                  
11 df1 d        b 24.00000                                                  
12 df1 d        c 39.00000                                                  
13 df2 e        a 18.50000                                                  
14 df2 e        b 15.50000                                                  
15 df2 e        c 16.50000                                                  
16 df2 f        a 26.33333                                                  
17 df2 f        b 42.00000                                                  
18 df2 f        c 37.00000                                                  
19 df2 g        a 26.50000                                                  
20 df2 g        b 22.00000                                                  
21 df2 g        c 31.00000                                                  
22 df3 h        a 29.25000                                                  
23 df3 h        b 34.25000                                                  
24 df3 h        c 32.00000                                                  
25 df3 i        a 30.33333                                                  
26 df3 i        b 40.00000                                                  
27 df3 i        c 24.33333                                                  
28 df3 j        a 21.00000                                                  
29 df3 j        b  5.00000                                                  
30 df3 j        c 46.00000 

它给出了每个变量(a-c)、每个因子d级别以及每个子数据帧(df1-df3)的平均值。

票数 3
EN

Stack Overflow用户

发布于 2013-01-21 13:58:49

你可以随时lapply你的ddply

代码语言:javascript
运行
AI代码解释
复制
 lapply(list.1, function(x)   ddply(x, .(d), function(x)  
                             data.frame(a=mean(x$a),b=mean(x$b),c= mean(x$c))) )

或者正确使用你的代码:

代码语言:javascript
运行
AI代码解释
复制
lapply(list.1, function(x) ddply(x,.(d),summarise, mean=mean(a)) )
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14439599

复制
相关文章
ggplot的aes和aes_string的差异
总共是26个基因,它们都是在case 和 control两个分组需要看表达量差异,而且case 和 control两个分组内部都是10个病人。
生信技能树
2022/07/26
1.8K0
ggplot的aes和aes_string的差异
java使用AES加密解密 AES-128-ECB加密
import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; /** * * @author Administrator * */ public class AES { // 加密 public static String Encrypt(String sSrc, String sKey) throws Exce
故久
2020/06/09
3.4K0
Java中的DES和3DES加密算法详解
DES是一种对称加密算法,它使用相同的密钥进行加密和解密操作。DES算法的核心是一个称为Feistel网络的结构,它将明文分成左右两部分,并通过多轮迭代和替换操作来生成密文。
公众号:码到三十五
2024/05/24
3770
Java中的DES和3DES加密算法详解
openssl使用-- 之 AES算法库使用
树莓派上面使用openssl-- 之 AES算法库使用 1 OPENSSL 提供AES 库接口调用的两种方式 1.1 第一种方法,使用aes.h的方式  aes.h 代码如下, 添加了中文注释表示含义 /* * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use *
无限之生
2020/06/30
2.3K0
AES加密和RSA加密
最近项目需要用到前端加密,某些特定的数据需要前端加密之后再传输到后端,然后后端再按照与前端约定好的方式进行解密。
epoos
2022/06/06
2.4K0
AES加密和RSA加密
密码学技术02
一次性密码本是一种非常简单的密码,它原理是:“讲明文与一串随机的比特序列进行XOR运算”
yichen
2020/01/02
7440
java使用AES加密解密 AES-128-ECB加密
import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; /** * * @author Administrator * */ public class AES { // 加密 public static String Encrypt(String sSrc, String sKey) throws Excep
故久
2020/06/04
4K0
Java使用AES加密解密
AES加密机制: 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。 这个标准用来替代原先的DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中
二十三年蝉
2018/08/01
5.1K0
DES和AES算法加密解密
前言:在api传递过程中或者操作cookie中的参数都是明文,很容易暴露一些用户以及私密的信息。
王念博客
2019/07/24
2K0
密码学系列之:feistel cipher
feistel cipher也叫做Luby–Rackoff分组密码,是用来构建分组加密算法的对称结构。它是由德籍密码学家Horst Feistel在IBM工作的时候发明的。feistel cipher也被称为Feistel网络。
程序那些事
2021/07/15
1.4K0
密码学系列之:feistel cipher
密码学系列之:feistel cipher
feistel cipher也叫做Luby–Rackoff分组密码,是用来构建分组加密算法的对称结构。它是由德籍密码学家Horst Feistel在IBM工作的时候发明的。feistel cipher也被称为Feistel网络。
程序那些事
2021/06/16
6590
读《图解密码技术》(一):密码
以前,对一些密码技术,虽然懂得怎么用,但对其原理却一直不甚了解,比如,用公钥加密后,为什么用私钥就可以解密?DES和AES加密时为什么需要一个初始化向量?想要了解这些密码技术的基本原理,而最近买书时看到了《图解密码技术》这本书,刚好可以解答到我的这些问题,于是,就买回来看了。
Keegan小钢
2018/08/10
3.3K1
读《图解密码技术》(一):密码
OpenSSL 使用AES对文件加解密
AES(Advanced Encryption Standard)是一种对称加密算法,它是目前广泛使用的加密算法之一。AES算法是由美国国家标准与技术研究院(NIST)于2001年发布的,它取代了原先的DES(Data Encryption Standard)算法,成为新的标准。AES是一种对称加密算法,意味着加密和解密使用相同的密钥。这就要求密钥的安全性非常重要,因为任何拥有密钥的人都能进行加密和解密操作。其密钥长度,包括128位、192位和256位。不同长度的密钥提供了不同级别的安全性,通常更长的密钥长度意味着更高的安全性。
王瑞MVP
2023/11/29
1.8K0
OpenSSL 使用AES对文件加解密
Vue项目使用AES做加密
1、先在vue项目中安装crypto-js 2、在项目中新建一个utils.js文件 3、utils.js文件中的内容 /** * 工具类 */ import Vue from 'vue' imp
用户1174387
2018/07/04
4.2K0
Python使用AES算法进行加解密
本文要点在于Python扩展库pycrypto实现了大量密码学算法,可以拿来直接使用。 import string import random from Crypto.Cipher import AES def keyGenerater(length): '''生成指定长度的秘钥''' if length not in (16, 24, 32): return None x = string.ascii_letters+string.digits return ''.join([random
Python小屋屋主
2018/04/16
1.8K0
《深入浅出密码学》——读书笔记(更新中)
h1 { text-align: center } h2 { text-align: center } .picture { text-align: center } thead th, tfoot th { text-align: left; background: grey; color: white } tbody th { text-align: left; background: Gainsboro; color:white }
Homqyy
2023/03/06
9860
《深入浅出密码学》——读书笔记(更新中)
AES加密
package com.test.util.encrypt; import org.apache.commons.lang3.StringUtils; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.spec.SecretKeySpec; import java.ma
Ryan-Miao
2018/03/13
3.1K0
CTF 玩转 Crypto 月度总结
两个越来,感谢老大哥们的照顾,自己学到挺多的简单的写下 Crypto 各类密码学和 misc 类流量分析的心得。菜鸡一个,不喜勿喷。
信安之路
2018/08/08
2.8K0
CTF 玩转 Crypto 月度总结
斯坦福大学密码学-分组密码 03
典型的分组密码以迭代的形式构建。输入密钥k,然后将密钥扩张成一系列的回合密钥 到 。使用这些回合密钥一次又一次的迭代使用回合函数加密明文信息。
Daffy
2020/11/03
2K0
使用AES进行文件加密算法
使用AES进行文件加密算法 前言:最近想对手机上一些文件进行加密隐藏,想自己基于jvm平台写一个(kotlin/java)但是网上的加密算法都是不公开的,所以自己利用AES的算法整出了一个文件加密解密的工具 注意:因为我电脑上的JDK是12+,所以如果移植到安卓上有出现报错,是正常现象,只需要修改 AESEncoder 文件就好了 FileEncoder.ktimport java.io.Closeableimport java.io.Fileimport java.io.RandomAccessFilei
Xiaolei123
2019/05/29
3.4K0
使用AES进行文件加密算法

相似问题

为什么AES不是Feistel密码?

30

在Feistel网络中对较小块使用AES

10

双圆Feistel网络

10

学习Feistel密码

20

Poly1305-AES能与AES-256一起使用吗?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档