reshape2 数据操作 数据融合 (melt)

前面一篇讲了cast,想必已经见识到了reshape2的强大,当然在使用cast时配合上melt这种强大的揉数据能力才能表现的淋漓尽致。

下面我们来看下,melt这个函数以及它的特点。

melt(data, ..., na.rm = FALSE, value.name = "value")

从这里来看函数的参数也相对比较简单,data表示要处理的数据,na.rm表示缺失值处理办法,value.name用于重命名值所在列的名称

另外,melt函数的难点在于,不同数据结构,用到的参数可能是不一样的。

首先,要融合的数据为数组、表以及矩阵,那么melt的表达式为:

melt(data, varnames = names(dimnames(data)), ..., na.rm = FALSE, as.is = FALSE, value.name = "value")

varnames用户命名变量名称

其次,要融合的数据为数据框,那么melt的表达式为:

melt(data, id.vars, measure.vars, variable.name = "variable", ..., na.rm = FALSE, value.name = "value", factorsAsStrings = TRUE)

id.vars  设置融合后单独显示的变量,可以用变量位置及名称表示,没写表示使用所有非measure.vars值

measure.vars  通常根据id.vars 设置的变化而变化

最后,要融合的数据为列表,那么melt的表达式为:

melt(data, ..., level = 1)

下面来看些具体的例子

data<- array(c(1:22, NA,"wo"), c(2,3,4))
data

melt(data)

可以看出数据融合后,可读性比数组的情况下强了好多,var1表示数组的行,var2表示数组的列,var3表示数组序列。

比如,18位置就是第3数组,2行3列的位置,11则是第2数组,1行3列。

melt(a, na.rm = TRUE)

可以看到数组中的缺失值被移除了。

melt(data, varnames=c("hang","lie","Zu"))

对融合后的每个变量进行重命名。

下面来看下数据为数据框的情况。

x<-data.frame(id=1:6,
              name=c("wang","zhang","li","chen","zhao","song"),
              shuxue=c(89,85,68,79,96,53),
              yuwen=c(77,68,86,87,92,63))
x

melt(x,id=c("id","name"))

 

melt(x,id=1:2,variable.name="kemu",value.name="zhi")

melt(x,measure.vars=c("id","name"))

最后,来看下如果数据是列表的情况

shuju<- list(matrix(1:4, ncol=2), array(1:27, c(3,3,3)))shuju

这个列表的机构比较复杂,读起来有点难度

下面melt融合后的结果

melt(shuju)

可以看出数据变得非常简洁。

时间: 2024-11-07 10:38:24

reshape2 数据操作 数据融合 (melt)的相关文章

reshape2 数据操作 数据融合( cast)

我们在做数据分析的时候,对数据进行操作也是一项极其重要的内容,这里我们同样介绍强大包reshape2,其中的几个函数,对数据进行操作cast和melt两个函数绝对少不了. 首先是cast,把长型数据转换成你想要的任何宽型数据, dcast(data, formula, fun.aggregate = NULL, ..., margins = NULL, subset = NULL, fill = NULL, drop = TRUE, value.var = guess_value(data))

dplyr 数据操作 数据过滤 (filter)

在R的使用过程中我们几乎都绕不开Hadley Wickham 开发的几个包,前面说过的ggplot2.reshape2以及即将要讲的dplyr 因为这几个包可以非常轻易的使我们从复杂的数据操作中逃离,操作过程简洁,最重要的是数据结果也异常简洁. 首先我们来了解下第一个函数filter() filter(.data, ...) 参数很简单,只有data,即要操作的数据对象,其他都是数据操作条件. 下面看一些简单的例子 library(dplyr) x<-data.frame(id=1:6, nam

MySQL对数据操作的一些深入语法

其他数据操作 数据的操作也叫作crud: C:create R:read U:update D:delete 插入数据 蠕虫复制 就是在已有的数据的基础之上,将原来的数据进行复制,插入到相对应的表中! 语法规则: insert into 表名 select *|字段列表from 表名 注意: 当一个表中的数据复制到另一个表中的时候,需要注意数据的来源要与被插入的表的字段数量和类型要保持一致! 总结蠕虫复制的优点: 1, 可以以最快的速度复制另外一张表的数据 2, 在短期内产生大量的数据,以测试服

计算机系统之汇编---IA32处理器数据格式及数据操作

计算机系统之汇编---IA32处理器数据格式及数据操作 IA32数据格式: Intel用术语"字"表示16位数据类型,因此,称32位数为"双字",称64位数为"四字". Char*这里指的是所有指针类型,注意:c语言新增加的long long是八字节,但是硬件IA32不支持这个类型. 寄存器(8个32位的寄存器,均以%e开头) %eax.%ecx.%edx:调用者保存(数据)寄存器,当过程p调用q,q可以覆盖这些寄存器,但是不会改变p中的数据.

Cocos数据篇[3.4](3) ——XML数据操作

[唠叨] XML 即 可扩展标记语言,在游戏开发中,常用于保存游戏数据信息,如最高分.游戏等级等信息,和描述一些资源等. 加载动画的plist文件.瓦片地图编辑器到处的地图格式tmx文件,实际上都是特定格式的xml文件. 另外 UserDefault 单例类保存的数据,也是存储在xml文件中的. Cocos2d-x 已经加入了 tinyxml2库 用于xml的解析.3.x版本位于external/tinyxml2下. 本节要介绍的就是:如何使用 tinyxml2库 来操作处理xml文件. [参考

Redis数据操作--字符串

| 储存文字,储存数字(整数,浮点数),二进制数 |  字符串操作 -- 设置字符串     set key value     # 如果字符串键key已经存在,     那么使用新值覆盖原来的旧值 -- 获取字符串     get key     # 返回字符串键key储存的值 -- 仅在键不存在的情况下进行设置     setnx key value     # 仅在键key不存在的情况下,将键key的值设置为value,     效果和set key value NX一样.NX的意思为"N

SQL语言-----数据操作

数据操作 增加数据,insert into 标准格式 insert into 表名 (字段的列表)value(数据列表): 使用set insert into 表名 set 字段1=值,2.....: 从其他数据表取数据插入 insert into 表名 (字段列表)select; 和insert into一样也是分在种,标准写法,set语法,从其它表取数据 标准方式 replace into 表名 (字段的列表) values (数据列表) 使用set: replace into 表名 set

Linux系统crond、rsync、打包备份数据操作实战

Linux系统crond.rsync.打包备份数据操作实战 前面介绍了系统中定时任务.rsync.打包等各种操作,同时也介绍了实际生产环境中的各类案例,今天我们结合这几种功能做一次实战(备份数据) 一:项目背景 某公司WEB服务器数据非常重要,但是如果硬件出现故障,数据就会丢失,人工备份比较费时费力,因些需要进行相关自动备份,并且要备份至指定的备份服务器上 具体备份内容有: 1.网站站点所有目录及相关文件 2.系统相关的配置文件 3.网站的访问日志文件 具体要求如下:(每天0点备份) 1.WEB

MySQL表的创建和表中数据操作

这篇文章主要介绍在navicat的命令界面操作mysql.主要涉及建立表结构,和对表中数据的增加删除修改查询等动作.站在一个新手角度的简单mysql表结构和数据操作. ☆ 准备工作 1,保证自己的电脑安装了mysql(my.ini下的字符集设置是utf8) 2,确保电脑同时安装navicat(任意版本) 3,保证mysql服务器已经启动 注:若对navicat操作不熟,请参照<<navicat从下载到使用>>这篇文章. ☆ 打开控制台 在navicat的tools(工具)菜单栏选择