本文主要是介绍[Rpackage]R语言plyr包使用方法——可进行类似数据透视表的操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
作者:leengsmile
链接:https://www.jianshu.com/p/bfddfe29aa39
來源:简书
一、使用的数据集
| year| name| percent| sex|
|---------:||---------:||---------:||---------:|
| 1880| John| 0.081541| boy|
| 1880| William| 0.080511| boy|
| 1880| James| 0.050057| boy|
| 1880| Charles| 0.045167| boy|
| 1880| George| 0.043292| boy|
| 1880| Frank| 0.02738| boy|
| 1880| Joseph| 0.022229| boy|
| 1880| Thomas| 0.021401| boy|
该表是美国新生儿的取名汇总表。
二、plyr包函数
1、每年包含的记录数
record_count <- function(df) {return(data.frame(count = nrow(df)))
}
ddply(baby_names, # 数据集.(year), # 分类的标准record_count # 函数
)
2、男孩、女孩名的各自排名
以2008年的数据为例,男孩名"Jacob"的比例最高,排名应当是第一,"Michael"紧跟其后,排名应当第二,依此类推。对于女孩名,"Emma"排名第一,"Isabella"排名第二,"Emily"排名第三等等。我们希望得到这样的结果。
对于2008年的数据,可以通过简单的rank
即可得到,不过要对男孩和女孩分别排序。
baby_names_2008_boy <- subset(baby_names_2008, sex == "boy") # 获取男孩名
baby_names_2008_boy$rank <- rank(- baby_names_2008_boy$percent) # 排序
head(baby_names_2008_boy) # 查看
使用ddply函数
ddply(baby_names, .(year, sex), transform, rank = rank(-percent, ties.method = "first")
)
3、排名前100的男孩名与女孩名在当年中的比例
baby_names_top100 <- subset(baby_names, rank <= 100) # 将前100排名的数据筛选出来
baby_names_top100_trend <- ddply(baby_names_top100, .(year, sex), # 按年和性别分割summarize, # 汇总数据trend = sum(percent)) # 汇总方式(求和)
这里出现一个新的操作函数summarize()
,该函数是对数据做汇总,与transform
不一样的是,该函数并不追加结果到原始数据,而是产生新的数据集。比如想知道,2008年的男孩名中,排名最高和最低的名字的百分比之差,可以通过如下方式求得:
summarize(baby_names_2008_boy, trend = max(percent) - min(percent))
# 0.010266
这篇关于[Rpackage]R语言plyr包使用方法——可进行类似数据透视表的操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!