R语言学习笔记(十七):data.table包中melt与dcast函数的使用

melt函数可以将宽数据转化为长数据

dcast函数可以将长数据转化为宽数据

> DT = fread("melt_default.csv")
> 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
> 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(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

对于较为复杂的数据可以这样做

> DT <- fread("melt_enhanced.csv")
> DT
   family_id age_mother dob_child1 dob_child2 dob_child3 gender_child1 gender_child2 gender_child3
1:         1         30 1998-11-26 2000-01-29         NA             1             2            NA
2:         2         27 1996-06-22         NA         NA             2            NA            NA
3:         3         26 2002-07-11 2004-04-05 2007-09-02             2             2             1
4:         4         32 2004-10-10 2009-08-27 2012-07-21             1             1             1
5:         5         29 2000-12-05 2005-02-28         NA             2             1            NA
> DT.m2 <- melt(DT, measure = patterns("^dob","^gender"), value.name = c("dob", "gender"))
> DT.m2
    family_id age_mother variable        dob gender
 1:         1         30        1 1998-11-26      1
 2:         2         27        1 1996-06-22      2
 3:         3         26        1 2002-07-11      2
 4:         4         32        1 2004-10-10      1
 5:         5         29        1 2000-12-05      2
 6:         1         30        2 2000-01-29      2
 7:         2         27        2         NA     NA
 8:         3         26        2 2004-04-05      2
 9:         4         32        2 2009-08-27      1
10:         5         29        2 2005-02-28      1
11:         1         30        3         NA     NA
12:         2         27        3         NA     NA
13:         3         26        3 2007-09-02      1
14:         4         32        3 2012-07-21      1
15:         5         29        3         NA     NA
> DT.c2 <- dcast(DT.m2, family_id + age_mother ~ variable, value.var = c("dob","gender"))
> DT.c2
   family_id age_mother      dob_1      dob_2      dob_3 gender_1 gender_2 gender_3
1:         1         30 1998-11-26 2000-01-29         NA        1        2       NA
2:         2         27 1996-06-22         NA         NA        2       NA       NA
3:         3         26 2002-07-11 2004-04-05 2007-09-02        2        2        1
4:         4         32 2004-10-10 2009-08-27 2012-07-21        1        1        1
5:         5         29 2000-12-05 2005-02-28         NA        2        1       NA

原文地址:https://www.cnblogs.com/xihehe/p/8304673.html

时间: 2024-10-27 09:15:45

R语言学习笔记(十七):data.table包中melt与dcast函数的使用的相关文章

R语言读取大数据 data.table包 fread函数

> setwd("D:\\R_Tardy") > library(data.table) //  data.table 1.9.6   // For help type ?data.table or  // https://github.com/Rdatatable/data.table/wikiThe fastest way to learn (by data.table authors):  //  https://www.datacamp.com/courses/da

R语言学习笔记(十六):构建分割点函数

选取预测概率的分割点 cutoff<- function(n,p){ pp<-1 i<-0 while (pp>=0.02) { model.predfu<-rep("failure",n) model.predfu[model4.prob > 0.2 + i*0.001]<-"victory" pp<- abs(p-sum(model.predfu=="failure")/n) i<-i+1

R语言学习笔记

參考:W.N. Venables, D.M. Smith and the R DCT: Introduction to R -- Notes on R: A Programming Environment for Data Analysis and Graphics,2003. http://bayes.math.montana.edu/Rweb/Rnotes/R.html 前言:关于R 在R的官方教程里是这么给R下注解的:一个数据分析和图形显示的程序设计环境(A system for data

R语言学习笔记 之 可视化地研究参议员相似性

基于相似性聚类 很多时候,我们想了解一群人中的一个成员与其他成员之间有多么相似.例如,假设我们是一家品牌营销公司,刚刚完成了一份挂怒有潜力新品牌的研究调查问卷.在这份调查问卷中,我们向一群人展示了新品牌的几个特征,并且要求他们对这个新品牌的每个特征按五分制打分.同时也收集了目标人群的社会经济特征,例如:年龄.性别.种族.住址的邮编以及大概的年收入. 通过这份调查问卷,我们想搞清楚品牌如何吸引不同社会经济特征的人群.最重要的是,我们想要知道这个品牌是否有很大的吸引力.换个角度想这个问题,我们想看看

R语言学习笔记2——绘图

R语言提供了非常强大的图形绘制功能.下面来看一个例子: > dose <- c(20, 30, 40, 45, 60)> drugA <- c(16, 20, 27, 40, 60)> drugB <- c(15, 18, 25, 31, 40) > plot(dose, drugA, type="b") > plot(dose, drugB, type="b") 该例中,我们引入了R语言中第一个绘图函数plot.pl

R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理

前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. 这次的主题是论R与excel的结合,又称 论如何正确把EXCEL文件喂给R处理 分为: 1. xlsx包安装及注意事项 2.用vba实现xlsx批量转化csv 以及,这个的对象,针对跟我一样那些从R开始接触编程的,一直以来都是用excel做数据分析的人……编程大牛请轻拍 之所以要研究这个,是因为最近工作上接了个活,要把原来在excel端的报表迁移到R端,自动输出可视化图形,并制作PDF或PPT. 这个活可以分为

R语言学习笔记:基础知识

1.数据分析金字塔 2.[文件]-[改变工作目录] 3.[程序包]-[设定CRAN镜像] [程序包]-[安装程序包] 4.向量 c() 例:x=c(2,5,8,3,5,9) 例:x=c(1:100) 表示把1 - 100的所有数字都给x这个变量 5.查看x的类型:>mode(x) 6.查看x的长度:>length(x) 7.将两个向量组成一个矩阵: >rbind(x1, x2)  注:r是row的意思,即行,按行组成矩阵. >cbind(x1, x2)  注c是column的意思,

R语言学习路线和常用数据挖掘包(转)

对于初学R语言的人,最常见的方式是:遇到不会的地方,就跑到论坛上吼一嗓子,然后欣然or悲伤的离去,一直到遇到下一个问题再回来.当然,这不是最好的学习方式,最好的方式是——看书.目前,市面上介绍R语言的书籍很多,中文英文都有.那么,众多书籍中,一个生手应该从哪一本着手呢?入门之后如何才能把自己练就成某个方面的高手呢?相信这是很多人心中的疑问.有这种疑问的人有福了,因为笔者将根据自己的经历总结一下R语言书籍的学习路线图以使Ruser少走些弯路. 本文分为6个部分,分别介绍初级入门,高级入门,绘图与可

R语言学习笔记之excel文件读取

在win32位的系统下,RODBC包内的函数是可以直接运行的,但在win64位的系统则不支持! 1.读取外部文件read.table()---csv,txt,excel 最基本函数是read.table(),先介绍read.table(),然后再介绍专门用来读csv的read.csv(). Description Reads a file in table format and creates a data frame from it, with cases corresponding to l