前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >R语言包_plyr

R语言包_plyr

作者头像
用户1147754
发布于 2019-05-26 04:08:26
发布于 2019-05-26 04:08:26
1.1K00
代码可运行
举报
文章被收录于专栏:YoungGyYoungGy
运行总次数:0
代码可运行
  • 基础
  • R函数和plyr
  • plyr包中一些有用的函数
  • R程序
  • 参考资料

plyr: The split-apply-combine strategy for R

不再是循环,而是向量操作,这个包的目的是简化apply类函数。 其相当于splitapply函数的整合。

基础

R函数和plyr

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#split
pieces = split(baseball[,6:9],baseball$year)
#apply
results = vector("list",length(pieces))
names = names(pieces)
for (i in seq(1,length(pieces))) {
    piece = pieces[[i]]
    results[[i]] = colMeans(piece)
}
#conbine
result = do.call("rbind",results)
result = as.data.frame(result)
result$name = names(pieces)

# an easy way
result2 = ddply(baseball,"year",function(df) colMeans(df[,6:9]))

# contrast
head(result2)
head(result)

plyr包中一些有用的函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# each 将多个函数放在一起输出
each(min, max)(1:10)
each(length, mean, var)(rnorm(100))
each("min", "max")(1:10)
each(c("min", "max"))(1:10)
each(c(min, max))(1:10)
# colwise 将原来只能计算vector的函数转化为可以计算df的列
nmissing <- function(x) sum(is.na(x))
colwise(nmissing)(baseball)
ddply(baseball, .(year), colwise(nmissing))
ddply(baseball, .(year), colwise(nmissing, c("sb", "cs", "so")))
ddply(baseball, .(year), colwise(nmissing, ~ sb + cs + so))
ddply(baseball, .(year), colwise(nmissing, is.character))
ddply(baseball, .(year), colwise(nmissing, is.numeric))
ddply(baseball, .(year), colwise(nmissing, is.discrete))
ddply(baseball, .(year), numcolwise(nmissing))
ddply(baseball, .(year), catcolwise(nmissing))
numcolwise(mean)(baseball, na.rm = TRUE)
numcolwise(mean, na.rm = TRUE)(baseball)
# arrange 省略了order繁琐的步骤,可以给df快速排序
mtcars[with(mtcars, order(cyl, disp)), ]
arrange(mtcars, cyl, disp)
myCars = cbind(vehicle=row.names(mtcars), mtcars)
arrange(myCars, cyl, disp)
arrange(myCars, cyl, desc(disp))
# rename 可以根据变量名而不是变量位置重新命名
x <- c("a" = 1, "b" = 2, d = 3, 4)
x <- rename(x, replace = c("d" = "c"))
rename(mtcars, c("disp" = "displacement"))
# count 等效as.data.frame(table(x))
count(baseball[1:100,], vars = "id")
count(baseball[1:100,], vars = "id", wt_var = "g")
count(baseball[1:100,], c("id", "year"))
# match_df 配合count,选出符合条件的行
longterm <- subset(count(baseball, "id"), freq > 25)
bb_longterm <- match_df(baseball, longterm, on="id")
# join 类似sql中的join,比merge速度更快
first <- ddply(baseball, "id", summarise, first = min(year))
system.time(b2 <- merge(baseball, first, by = "id", all.x = TRUE))
system.time(b3 <- join(baseball, first, by = "id"))

R程序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# a simple example
set.seed(1)
d = data.frame(year=rep(2000:2002,each=3), count=round(runif(9,0,20)))
d
ddply(d,"year",function(x) {
    mean.count = mean(x$count)
    sd.count = sd(x$count)
    cv = sd.count/mean.count
    data.frame(cv.count=cv)
})

# transform summarise mutate(like transform)
ddply(d,"year",summarise,mu=mean(count),sigma=sd(count),cv=sigma/mu)
ddply(d,"year",transform,mu=mean(count),sigma=sd(count))
ddply(d,"year",mutate,mu=mean(count),sigma=sd(count),cv=sigma/mu)

# build seperate models
model = function(df) {
    lm(hwy~year,data=df)
}
models = dlply(mpg,.(cyl),model)
coefs = ldply(models,function(x) coef(x))

# plot
opar = par()
par(opar)
par(mfrow=c(1,3), mar=c(2,2,1,1), oma=c(3,3,0,0))
d_ply(d,"year",summarise,plot(count,main=unique(year),type="o"))
mtext("count",side=1,outer=T,line=1)
mtext("frequency",side=2,outer=T,line=1)

library(ggplot2)
ggplot(d,aes(x=year,y=count)) + geom_line() + facet_grid(year~.)

# nested chunking of the data
baseball.dat = subset(baseball,year>2000)
head(baseball.dat)
x = ddply(baseball.dat,c("year","team"),summarize,homeruns=sum(hr))
head(x)

# deal with errors
f = function(x) if(x==1) stop("error!") else 1
safe.f = failwith(NA,f,quiet = T)
llply(1:2,f)
llply(1:2,safe.f)

# parallel processing
x = c(1:10)
wait = function(i) Sys.sleep(0.1)
system.time(llply(x,wait))
system.time(sapply(x,wait))
install.packages("doMC")
library(doMC)
registerDoMC(2)
system.time(llply(x,wait,.parallel=T))

# plyr flaws: low speed than build-in function
system.time(ddply(baseball,"id",summarize,length(year)))
system.time(tapply(baseball$year,baseball$id,function(x) length(x)))

参考资料

Sean Anderson 的R教程

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年09月01日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux安装tomcat,配置环境变量
一、 安装tomcat需要先配置jdk,所以没有配置jdk同学,先移步Linux安装JDK
全栈程序员站长
2022/09/05
3.8K0
Linux学习-vmware虚拟机安装tomcat
/usr/local/tomcat/bin/startup.sh //启动tomcat
全栈程序员站长
2022/02/25
1.3K0
Linux学习-vmware虚拟机安装tomcat
Ubuntu 18.04 安装 Hadoop系统环境
安装ubuntu-server系统 安装系统 选择系统语言-English 键盘设置-Chinese 选择操作Install ubuntu 设置网络(这里选择默认) 选择Done 文件系统设置-选择使
吟风者
2019/07/24
7570
Centos7 安装 Tomcat8 的正确姿势 并设置开机自启 实践笔记
我使用centos7X64最小化安装 CentOS-7-x86_64-Minimal-1708
cookily
2020/09/11
1.3K0
在Linux上面装jdk,一步一步带你安装
以上的local文件夹下就有一个jdk的文件夹,里面就是jdk的东西了,我们就解压成功了
一写代码就开心
2024/01/10
2240
在Linux上面装jdk,一步一步带你安装
SpringCloud (五) - 云服务器Centos7.6,安装JDK,Maven,Mysql,Redis
购买地址:https://cloud.tencent.com/act/pro/2022double11_warmup
化羽羽
2022/11/14
1.5K0
SpringCloud (五) - 云服务器Centos7.6,安装JDK,Maven,Mysql,Redis
Linux安装Tomcat并发布项目
点击 Download 后会进去另一个页面,这里可以选择我们想要版本,图中箭头指向的就是我们Linux使用的版本。
叫我阿杰好了
2022/11/07
1.2K0
Linux安装Tomcat并发布项目
CentOS 安装 nginx+tomcat+java+mysql运行环境
本文介绍了CentOS7 64 Java,Tomcat,MySQL,Maven热部署等服务器环境的搭建过程。
haikangweishi
2020/03/24
1.7K0
Linux各种常用开发软件安装教程(JDK、Tomcat、MySQL、Nginx、Redis)
-A INPUT -m state --state NEW -m tcp -p tcp --dport 你要开放的端口 -j ACCEPT
青山师
2023/05/05
5080
CentOS6环境下JDK、MySQL、Tomcat安装
          vi /etc/sysconfig/network-scripts/ifcfg-eth0
挽风
2021/04/13
5260
CentOS6环境下JDK、MySQL、Tomcat安装
Linux下安装Zookeeper、Redis、Nexus和Jenkins
公司搞了个新的服务器,啥也没有,让我部署项目上去(本来老板是问我会不会,我想着我博客就是自己部署的,就说了会),没想到搞了两天。
sunonzj
2022/06/21
4.7K0
Linux下安装Zookeeper、Redis、Nexus和Jenkins
腾讯云服务器 java+mysql+tomcat+maven 环境搭建(ContOS7)
【1】进入:http://tomcat.apache.org/download-80.cgi,下载.tar.gz的压缩包
用户2416682
2019/10/31
2.1K0
Linux使用
Liunx使用 命令管道连接 | 命令管道符合为|,可以将两个命令进行连接,连接后第一个命令的输出结果作为第二个命令的输入信息 比如 ls /ect | more -10 分屏显示etc文件夹下的10行数据 Linux文件系统结构 / : 根目录 /home: 主文件夹,登录用户的主文件夹 /etc :操作系统配置文件的保存位置 /usr : 用于添加的程序文件,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。 root : 超级用户的目录 改变当前
爱撒谎的男孩
2018/06/06
7.4K3
Linux搭建环境的详细步骤(一)
服务器上Linux的登录账号一般都是root,密码是你自己设置的密码,如果是Liunx在虚拟机上,那账号和密码就是你的登录的账号和密码。
测试小兵
2019/08/30
5.4K1
Linux搭建环境的详细步骤(一)
记录 linux 下 部署 tomcat
此文章记录了我在VM虚拟机上安装tomcat,并部署webApp,因为我这个项目的是在windows server2003下运行的,所以自己没事研究一下如何部署到linux上面,我用的是 CentOS 6.8 ,附上下载地址
全栈程序员站长
2022/07/05
5K0
快速上手 Linux 系统部署 Java 项目(附安装包、文档、视频)!
VMware Workstation 是一款桌面虚拟计算机软件,可在一部实体机器上模拟完整的网络环境,我们通过 VMware 可以在单一的桌面上同时运行不同的操作系统,进行代码的开发、测试 、部署。
南风
2020/05/13
2.2K0
快速上手 Linux 系统部署 Java 项目(附安装包、文档、视频)!
本章目标: 将SSM项目及数据库完整的部署CentOS7
 jdk1.8+tomcat8.5+mysql5.7 🙃🙃1. 上传及下载文件    1.1 安装及使用lrzsz    1.2 上传: rz    1.3 下载: sz 文件名 🙃🙃2. 上传jdk和tomcat的安装文件到指定文件夹  mkdir /usr/local/mytools   🎃🎃  注1:安装见资料 apache-tomcat-8.5.20.tar.gz         jdk-8u151-linux-x64.tar.gz 🙃🙃3. linux压缩和解压命令
用户10196776
2022/11/22
6920
本章目标: 将SSM项目及数据库完整的部署CentOS7
Linux下安装JDK1.8、Tomcat、以及MySQL详细介绍(附软件分享)
1、通过相关软件或拖拽的形式将安装包放入Linux目录中 2、解压jdk 1.8.0_11并将jdk复制到 /usr/local目录下
时间静止不是简史
2020/07/27
7920
Linux下安装JDK1.8、Tomcat、以及MySQL详细介绍(附软件分享)
Linux系统上安装JDK、Tomcat以及Redis
首先检查Linux系统上是否有JDK,一般Linux系统会有默认的openJDK,将其卸载掉。
Java阿呆
2020/11/04
1.4K0
Linux系统上安装JDK、Tomcat以及Redis
tomcat安装并设置开机自启(Linux&&Windows)
Tomcat是其中一个开源的且免费的java Web服务器,是Apache软件基金会的项目,所以安装Tomcat之前要安装java JDk,请参照Linux安装jdk
鱼找水需要时间
2023/02/16
3.2K0
tomcat安装并设置开机自启(Linux&&Windows)
推荐阅读
相关推荐
Linux安装tomcat,配置环境变量
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验