reshape的两个函数melt和dcast
reshape
Reshape包主要是用来做数据变形的。其中主要的有两个函数melt和dcast1。其中melt主要用于宽变长,而dcast1主要用于长变宽。melt和dcast1是reshape2包中函数的扩展。
在v1.9.6起,无需载入reshape2就可以使用这些函数。只需要载入data.table即可。如果必须载reshape2包,请确定在载入data.table前载入。
melt函数
假设我们有数据如下:
library(data.table)
DT=fread("melt_default.csv")
head(DT)
## family_id age_mother dob_child1 dob_child2 dob_child3
## 1: 1 30 1998-11-26 2000-01-29 NA
## 2: 2 27 1996-06-22 NA NA
## 3: 3 26 2002-07-11 2004-04-05 2007-09-02
## 4: 4 32 2004-10-10 2009-08-27 2012-07-21
## 5: 5 29 2000-12-05 2005-02-28 NA
str(DT)
## Classes 'data.table' and 'data.frame': 5 obs. of 5 variables:
## $ family_id : int 1 2 3 4 5
## $ age_mother: int 30 27 26 32 29
## $ dob_child1: chr "1998-11-26" "1996-06-22" "2002-07-11" "2004-10-10" ...
## $ dob_child2: chr "2000-01-29" NA "2004-04-05" "2009-08-27" ...
## $ dob_child3: chr NA NA "2007-09-02" "2012-07-21" ...
## - attr(*, ".internal.selfref")=<externalptr>
DT.m1=melt(DT,id.vars = c("family_id","age_mother"),measure.vars = c("dob_child1","dob_child2","dob_child3"))
DT.m1
## family_id age_mother variable value
## 1: 1 30 dob_child1 1998-11-26
## 2: 2 27 dob_child1 1996-06-22
## 3: 3 26 dob_child1 2002-07-11
## 4: 4 32 dob_child1 2004-10-10
## 5: 5 29 dob_child1 2000-12-05
## 6: 1 30 dob_child2 2000-01-29
## 7: 2 27 dob_child2 NA
## 8: 3 26 dob_child2 2004-04-05
## 9: 4 32 dob_child2 2009-08-27
## 10: 5 29 dob_child2 2005-02-28
## 11: 1 30 dob_child3 NA
## 12: 2 27 dob_child3 NA
## 13: 3 26 dob_child3 2007-09-02
## 14: 4 32 dob_child3 2012-07-21
## 15: 5 29 dob_child3 NA
str(DT.m1)
## Classes 'data.table' and 'data.frame': 15 obs. of 4 variables:
## $ family_id : int 1 2 3 4 5 1 2 3 4 5 ...
## $ age_mother: int 30 27 26 32 29 30 27 26 32 29 ...
## $ variable : Factor w/ 3 levels "dob_child1","dob_child2",..: 1 1 1 1 1 2 2 2 2 2 ...
## $ value : chr "1998-11-26" "1996-06-22" "2002-07-11" "2004-10-10" ...
## - attr(*, ".internal.selfref")=<externalptr>
measure.vars界定了收缩的列的集合。- 收缩的列会自动变成
variable和value
在命令中可以对variable和value的列名进行更改。如果id.vars和measure.vars没有指定,方法会将其中非数值的、证书的和逻辑值的列作为id.vars。同时会输出警告信息。
DT.m1=melt(DT,measure.vars = c("dob_child1","dob_child2","dob_child3"),variable.name = "child",value.name = "dob")
DT.m1
## family_id age_mother child dob
## 1: 1 30 dob_child1 1998-11-26
## 2: 2 27 dob_child1 1996-06-22
## 3: 3 26 dob_child1 2002-07-11
## 4: 4 32 dob_child1 2004-10-10
## 5: 5 29 dob_child1 2000-12-05
## 6: 1 30 dob_child2 2000-01-29
## 7: 2 27 dob_child2 NA
## 8: 3 26 dob_child2 2004-04-05
## 9: 4 32 dob_child2 2009-08-27
## 10: 5 29 dob_child2 2005-02-28
## 11: 1 30 dob_child3 NA
## 12: 2 27 dob_child3 NA
## 13: 3 26 dob_child3 2007-09-02
## 14: 4 32 dob_child3 2012-07-21
## 15: 5 29 dob_child3 NA
dcast函数
dcast将数据从长边短。
dcast(DT.m1,family_id+age_mother~ child,value.var = "dob")
## family_id age_mother dob_child1 dob_child2 dob_child3
## 1: 1 30 1998-11-26 2000-01-29 NA
## 2: 2 27 1996-06-22 NA NA
## 3: 3 26 2002-07-11 2004-04-05 2007-09-02
## 4: 4 32 2004-10-10 2009-08-27 2012-07-21
## 5: 5 29 2000-12-05 2005-02-28 NA
dcast使用公式界面。value.var说明列将会变成宽格式。
如何知道每个家庭小孩子的数量呢?
dcast(DT.m1,family_id~.,fun.aggregate = function(x)sum(!is.na(x)),value.var = "dob")
## family_id .
## 1: 1 2
## 2: 2 1
## 3: 3 3
## 4: 4 3
## 5: 5 2
参考文献: Efficient reshaping using data.tables
reshape的两个函数melt和dcast的更多相关文章
- isset 和empty 两个函数的用法
关于用php 获取当前脚本的url很多朋友会说很简单,但是要获取很详细的就要经过多次判断哦. $PHP_TIME = time();$PHP_SELF = isset($_SERVER['PHP_SE ...
- socket.io问题,io.sockets.manager.rooms和io.sockets.clients('particular room')这两个函数怎么用?
为什么我用nodejs用这个两个函数获取都会出错呢?是不是socket的api改了?请问现在获取房间数和当前房间的客户怎么获取?什么函数?谢谢!!急求! 网友采纳 版本问题.io.socket ...
- C语言求两个函数中的较大者的MAX函数
//求两个函数中的较大者的MAX函数 #include <stdio.h> int main(int argc, const char * argv[]) { printf("i ...
- JQuery获取元素宽度.width()与.css(‘width’)两个函数的区别
整理翻译自:http://blog.jquery.com/2012/08/16/jquery-1-8-box-sizing-width-csswidth-and-outerwidth/ 大意是: 在J ...
- attr prop jquery关于获取DOM属性值的两个函数
$('#domid').attr('acitve') $('#domid').prop('checked') // 在使用JQUERY获取DOM元素的属性时,有两个函数,attr 和 prop < ...
- js中 var functionName = function() {} 和 function functionName() {} 两种函数声明的区别
js中有两种声明函数的方法,分别为: var functionOne = function() { // Some code }; function functionTwo() { // Some c ...
- JS中var声明与function声明两种函数声明方式的区别
JS中常见的两种函数声明(statement)方式有这两种: // 函数表达式(function expression) var h = function() { // h } // 函数声明(fun ...
- 利用jQuery扩展接口为jQuery框架定义了两个自定义函数,然后调用这两个函数
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- skb的两个函数pskb_copy和skb_copy
转自:http://blog.csdn.net/farmwang/article/details/54235252 skb的两个函数pskb_copy和skb_copy 前者仅仅是将sk_buff的结 ...
随机推荐
- 记reinforcement learning double DQNS
传统的DQN算法会导致overestimate.因为在训练开始时,最大的Q值并不一定是最好的行为. 也就是说较差的行为Q值相对较大,较好的行为Q值相对较小.这时我们在更新Q值时用最大期望来计算我们作为 ...
- Python统计excel表格中文本的词频,生成词云图片
import xlrd import jieba import pymysql import matplotlib.pylab as plt from wordcloud import WordClo ...
- caog
import pandas as pd#匹配可发库存1. import oslst=os.listdir(r'E:\每日必做\琪琪小象库存')lst1=[]for i in lst: if i[:2] ...
- 易语言Dns缓存
一些与DNS解析有关的命令: ipconfig/displaydns -查看被缓存的域名解析 ipconfig/flushdns -清空DNS缓存 .版本 .DLL命令 DnsFlushR ...
- input type file兼容性
input 中的type file类型 在ie10及以上还算正常,在ie9中你就找不到他在哪了 解决此类的问题就需要巧妙的运用的css 以及input 了 需要两个input配合来写,一个i ...
- echarts常见配置项总结,legend、toolbox、tooltip等
1.饼状图指示线改变颜色:series.labelLine.lineStyle series : [ { name: '默认文字', type: 'pie',//类型饼状图 hoverAnimatio ...
- 在Java中用 . 深层访问JSON数据
本文介绍Java中解析JSON的一种方法,可以让我们在Java程序中也用x.x.x的形式访问JSON数据中的值. 代码大部分来源非本人,本人在源代码基础上加以修改以使正常运行. 代码: // 将提取方 ...
- eclipse 中git无法https下载提交代码
使用eclipse下载github代码时,报错信息为cannot open git-upload-pack,如下图: 其实就是ssl协议的版本不对, 2018年2月8日后禁止通过TLSv1.1协议连接 ...
- QWaitCondition 的思考2
本文章为原创,如引用请指明出处 问:QWaitCondition的 wake() ,wakeall() 函数唤醒的是哪些线程呢? 是不是在全局范围内该类的各个对象造成的悬挂线程都可以被唤醒呢? 回答: ...
- latex如何定义宏,插图统一尺寸减少工作量
问题背景是这样的,因为我要在文中插入一系列的图片,但是这些图片的大小我要保持一致,来达到预期的效果. 比如我有三个figure,这三个figure中,每个figure里面有两行,5列图片,我想要的是, ...