reshape

Reshape包主要是用来做数据变形的。其中主要的有两个函数meltdcast1。其中melt主要用于宽变长,而dcast1主要用于长变宽。
meltdcast1reshape2包中函数的扩展。
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界定了收缩的列的集合。

  • 收缩的列会自动变成variablevalue

在命令中可以对variablevalue的列名进行更改。如果id.varsmeasure.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的更多相关文章

  1. isset 和empty 两个函数的用法

    关于用php 获取当前脚本的url很多朋友会说很简单,但是要获取很详细的就要经过多次判断哦. $PHP_TIME = time();$PHP_SELF = isset($_SERVER['PHP_SE ...

  2. socket.io问题,io.sockets.manager.rooms和io.sockets.clients('particular room')这两个函数怎么用?

    为什么我用nodejs用这个两个函数获取都会出错呢?是不是socket的api改了?请问现在获取房间数和当前房间的客户怎么获取?什么函数?谢谢!!急求!     网友采纳 版本问题.io.socket ...

  3. C语言求两个函数中的较大者的MAX函数

    //求两个函数中的较大者的MAX函数 #include <stdio.h> int main(int argc, const char * argv[]) { printf("i ...

  4. JQuery获取元素宽度.width()与.css(‘width’)两个函数的区别

    整理翻译自:http://blog.jquery.com/2012/08/16/jquery-1-8-box-sizing-width-csswidth-and-outerwidth/ 大意是: 在J ...

  5. attr prop jquery关于获取DOM属性值的两个函数

    $('#domid').attr('acitve') $('#domid').prop('checked') // 在使用JQUERY获取DOM元素的属性时,有两个函数,attr 和 prop < ...

  6. js中 var functionName = function() {} 和 function functionName() {} 两种函数声明的区别

    js中有两种声明函数的方法,分别为: var functionOne = function() { // Some code }; function functionTwo() { // Some c ...

  7. JS中var声明与function声明两种函数声明方式的区别

    JS中常见的两种函数声明(statement)方式有这两种: // 函数表达式(function expression) var h = function() { // h } // 函数声明(fun ...

  8. 利用jQuery扩展接口为jQuery框架定义了两个自定义函数,然后调用这两个函数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. skb的两个函数pskb_copy和skb_copy

    转自:http://blog.csdn.net/farmwang/article/details/54235252 skb的两个函数pskb_copy和skb_copy 前者仅仅是将sk_buff的结 ...

随机推荐

  1. 设置Linux系统的LANG变量

    设置linux系统的LANG变量 对于国内的Linux用户,经常烦恼的一个问题是:系统常常在需要显示中文的时候却显示成了乱码,而由于某些原因,需要英文界面的系统的时候,却苦于系统不能正常输入和显示中文 ...

  2. mysql com.mysql.cj.jdbc.Driver 配置

    需配置时区 例如 url jdbc:mysql://127.0.0.1/sell?serverTimezone=Hongkong&useUnicode=true&characterEn ...

  3. JS快排

  4. springboot+ibatis 多数据源配置

    这个是boot基本版本包,因为我用的打包方式是war所以去除掉了boot内置的tomcat,但是为了方便测试又引入了内置tomcat,只要添加<scope>provided</sco ...

  5. 学习小片段——thymeleaf入门

    1: 概述 thymeleaf是一个跟 Velocity.FreeMarker 类似的模板引擎,和以前学的jsp相近,但性能上无疑是比jsp好. 参考文档官方文档:https://www.thymel ...

  6. Python学习之路基础篇--04Python基础+数据类型

    1 int 只需知道 i.bit_length() 是算其二进制的位数, 如3 就是2: 5就是 3. 2 bool 要知道 while True == while 1   :除零以外的所有数都为真 ...

  7. Java程序第一次作业

    public class yjj { public static void main(String[] args) { System.out.println("Hello Java" ...

  8. js中Array数组的属性和方法

    这是我自己整理出来的一些关于Array数组的属性和方法,即查即用. 1.Array.length属性:数组的项数组,始终返回0或者更大的值. 2.instanceof操作符:value instanc ...

  9. 学习笔记TF062:TensorFlow线性代数编译框架XLA

    XLA(Accelerated Linear Algebra),线性代数领域专用编译器(demain-specific compiler),优化TensorFlow计算.即时(just-in-time ...

  10. Oracle—通过操作系统进程查看数据库sql语句

    工作中遇到一个问题,某报表运行时间特别长,通过操作系统可以看到一个oracle进程消耗资源比较大,如何能够通过该操作系统进程找到具体SQL呢.记录如下: 1.查看Linux系统进程号 可以通过top动 ...