前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
R语言包_dplyr_2
data_frame() is a better way than data.frame() for creating data frames. Benefits of data_frame():
用户1147754
2019/05/26
7020
R语言基于dplyr实现数据快捷操作
4. filter 匹配对应行的数据。并生成结果。等同于subset函数。实例:
一粒沙
2020/12/14
1.5K0
干货 | 男朋友老是说自己R语言很6,快来用这40道题目检测他
大数据文摘作品,转载要求见文末 作者 | NSS 编译 | 张伯楠,刘云南 弋心,卫青,宁云州 R语言是数据科学领域最流行的语言之一。如果你真想从事数据科学事业,那你要么已经会用R语言要么正在学习它。R语言同样是一个拥有广泛的统计和数据科学库的生态系统。为了帮助数据科学家测试他们的R语言能力,我们为DataFest 2017设计了一部分技能测试题。 超过1500人注册了这项考试并有接近500人完成了测试。下图是不同测试者的成绩分布: 下面是关于成绩分布的一些统计数据: 平均分:16.69 分数中值:19
大数据文摘
2018/05/24
2K0
「R」用purrr实现迭代
除了函数,减少重复代码的另一种工具是迭代,它的作用在于可以对多个输入执行同一种处理,比如对多个列或多个数据集进行同样的操作。
王诗翔呀
2020/07/03
4.8K0
R tips:dplyr编程
dplyr的函数由于使用tidy evaluation(R中的一种非标准执行(NSE)实现方式)的方法,可以使得其具有更好的易用性:变量不需要绝对引用和引号包裹。
生信菜鸟团
2020/07/02
1.2K0
数据清洗过程中常见的排序和去重操作
数据操作中排序和去重是比较常见的数据操作,本专题对排序和去重做专门介绍,并且给出一种不常用却比较有启发意义的示例:多列无序去重
1480
2019/07/22
1.1K0
数据清洗过程中常见的排序和去重操作
Pandas 2.2 中文官方教程和指南(三)
要使Name列中的每个字符串都变为小写,选择Name列(参见数据选择教程),添加str访问器并应用lower方法。因此,每个字符串都被逐个转换。
ApacheCN_飞龙
2024/05/24
2190
R语言统计知识以及常用方法实例
文章目录 统计 平均值 中位数 众数 线性回归 一元 多元回归 逻辑回归 正态分布 决策树 随机森林 生存分析 卡方检验 统计 平均值 语法 mean(x, trim = 0, na.rm = FALSE, ...) x - 是输入向量。 trim - 用于从排序的向量的两端删除一些观测值。 na.rm - 用于从输入向量中删除缺少的值。 示例 x <- c(17,8,6,4.12,11,8,54,-11,18,-7) # Find Mean. result.mean <- mean(x) print(
AI拉呱
2021/01/14
6440
使用gtExtra美化表格
前面用2篇文章详细介绍了gt包创建表格的用法。gt很强大,但是还是不够强大,总有些大佬想要更加强大,于是就有了今天要介绍的gtExtras,这是一个扩展包,为gt提供多种强大的可视化功能!
医学和生信笔记
2022/11/15
8190
使用gtExtra美化表格
深入对比数据科学工具箱:Python和R之争
在真实的数据科学世界里,我们会有两个极端,一个是业务,一个是工程。偏向业务的数据科学被称为数据分析(Data Analysis),也就是A型数据科学。偏向工程的数据科学被称为数据构建(Data Building),也就是B型数据科学。 从工具上来看,按由业务到工程的顺序,这个两条是:EXCEL >> R >> Python >> Scala 在实际工作中,对于小数据集的简单分析来说,使用EXCEL绝对是最佳选择。当我们需要更多复杂的统计分析和数据处理时,我们就需要转移到 Python和R上。在确定工程实施和大数据集操作时,我们就需要依赖Scala 的静态类型等工程方法构建完整的数据分析系统。 Scala和Excel是两个极端,对于大多数创业公司而言,我们没有足够多的人手来实现专业化的分工,更多情况下,我们会在Python和R上花费更多的时间同时完成数据分析(A型)和数据构建(B型)的工作。而许多人也对 Python和R的交叉使用存在疑惑,所以本文将从实践角度对Python和R中做了一个详细的比较。
生信宝典
2019/08/30
1.1K0
深入对比数据科学工具箱:Python和R之争
R包基础实操—tidyverse包
核心软件包是ggplot2、dplyr、tidyr、readr、purrr、tibble、stringr和forcats,它们提供了建模、转换和可视化数据的功能。
生信技能树jimmy
2021/10/11
3.4K0
R包基础实操—tidyverse包
Day6 呦呦鹿鸣—学习R包
列表书写顺序决定了最终合成列表中列的顺序,每列数值的类型必须相同;以"by"的列为标准,补齐列表,空值为"NA"
用户10918035
2024/01/20
1720
R语言_高级数据管理
#数值处理函数 #数学函数 abs sqrt ceiling floor round(x,digits=n) #舍入为指定位的小数 signif #舍入为指定位的有效数字 log(x,base=n) log() #常用对数 log10() exp() #统计函数 mean(x,trim=0.05,na.rm=TRUE) #截尾平均数 median sd var mad quantitle(x,probs) range #求值域 diff(range(x)) sum diff(x,lag=
用户1147754
2019/05/27
5570
分组统计你只想到group_by操作吗?
最近在研究excel透视图,想到好像自己在R-分组操作并不是很流畅,顺便学习分享一下。R自带数据集比较多,今天就选择一个我想对了解的mtcars数据集带大家学习一下R语言中的分组计算(操作)。
1480
2019/09/02
9960
dplyr-cli:在Linux Terminal上直接执行dplyr
熟悉R的朋友都会知道, dplyr包是对原始的数据集进行清洗、整理以及变换的有力武器之一。但是其使用会局限于你需要有打开R/R studio或者通过R脚本来执行 dplyr。对于这个问题,今天即将需要介绍的 dplyr-cli就能很好的解决这个问题。
生信菜鸟团
2020/05/19
2.1K0
R语言包_dplyr_1
有5个基础的函数: - filter - select - arrange - mutate - summarise - group_by (plus)
用户1147754
2019/05/26
9610
10个令人相见恨晚的R语言包
新媒体管家 大约3年前我开始使用R,起初进展很慢,与我习惯的语言相比,语法更加直观也比较简单,而且需要一段时间才能习惯于细微的差别。我还不清楚语言的力量与社区和各种包的密切关系。 和其他语言(比如Py
CDA数据分析师
2018/02/08
1.6K0
10个令人相见恨晚的R语言包
R海拾遗_再谈非标准评估
上面的例子summary的变量是disp,分组变量是cyl和am,使用三个点这里传递了任意个参数
火星娃统计
2021/06/29
7190
数据清洗与管理之dplyr、tidyr
先前已经讲过R语言生成测试数据、数据预处理和外部数据输入等内容,但这仅仅是第一步,我们还需要对数据集进行筛选、缺失值处理等操作,以便获得可以应用于建模或者可视化的数据集(变量)。接下来就以鸢尾花测试数据集进行进一步的数据管理和筛选操作。
1480
2019/06/20
1.9K0
数据清洗与管理之dplyr、tidyr
数据处理的R包
整理数据的本质可以归纳为:对数据进行分割(Split),然后应用(Apply)某些处理函数,最后将结果重新组合(Combine)成所需的格式返回,简单描述为:Split - Apply - Combine。plyr包是Hadley Wickham为解决split – apply – combine问题而写的一个包。使用plyr包可以针对不同的数据类型,在一个函数内同时完成split – apply – combine三个步骤。plyr包的主函数是**ply形式的,函数名的第一个字符代表输入数据的类型,第二个字符代表输出数据的类型,其中第一个字符可以是(d、l、a),第二个字母可以是(d、l、a、_ ),不同的字母表示不同的数据格式,d表示数据框格式,l表示列表,a表示数组,_则表示没有输出。
润森
2020/02/17
4.7K0
数据处理的R包
相关推荐
R语言包_dplyr_2
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验