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的结 ...
随机推荐
- CSS效果:跑马灯按钮
HTML代码 <html lang="en"> <head> <meta charset="UTF-8"> <meta ...
- 关于C#鼠标方面的。
因为,遇到这样的提问,就是当点击按钮后,让按钮的位置,随着鼠标移动而移动. 思路,就是按下后记录鼠标的坐标,然后修改按钮的坐标 0: Control.PointToScreen:将指定工作区点的位 ...
- 2019微软Power BI 每月功能更新系列——3月Power BI 新功能学习
Power BI3月产品功能更新发布啦!本次新功能新增了热图和单选切片器:完善了新的DAX功能和对现有功能的改进(例如按钮和选择窗格):同时官方表示建模视图的全面改进也正在进行中~Woo~那么,本月更 ...
- css尺寸(大小)属性
尺寸属性:用来控制元素大小的属性,单位为长度单位. 尺寸属性的使用场景 当使用相对长度单位定义尺寸时,元素的大小跟随窗口大小变化. 为保证元素的正常显示,需要设定元素的最大.最小长度. 手机端开发时需 ...
- 二进制按位与(&) 按位或(|) 异或运算(^)
1.参加运算的两个数据,按照二进制进行按位与的运算. 运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1; 即:两位同时为“1”,结果才为 ...
- 直接执行sql字符串
$sql_tmp= "UPDATE `eabc_order_detail` set send_number=num where order_sn='".$model_order-& ...
- 数字特征值-python
#Digital eigenvalue.py number = eval(input()) count = 0 Ob = 0 Ox = 0 while number > 0: Ob = numb ...
- react native onEndReached频繁多次调用问题
今天被这个问题搞得头疼,写一个分页加载,但是listview的onEndReached方法老是被频繁调用,知道加载完所有的分页数据才停止. <ListView automaticallyAdju ...
- Python学习之路基础篇--03Python基础+万恶的运算符
1 格式化输出% 用%s(用来表示str数据类型) 和 %d (用来表示int数据类型),如果要用%号的话,就要使用两个%%,这样即可输出. 2 初识编码 电脑的传输数据,储存都是用的 0101010 ...
- Python3常用函数、方法总结(持续更新…)
最近刷LeetCode,自己自娱自乐完之后去discussion看大佬们的各种巧妙解法,总是止不住的双击666--加上最近Python3用的比较多(虽然Python实在不推荐跑算法题目,一是运行效率太 ...