原网址 http://blog.sina.com.cn/s/blog_6bb07f83010152z0.html

在使用R做数据挖掘时,最常用的数据结构莫过于dataframe了,下面列出几种常见的dataframe的操作方法。
1.查看数据

head(dataframe) # 查看数据前10行
tail(dataframe) # 查看数据后10行

2.合并数据
(1)data.frame(x,y)
x,y是dataframe或者一列数据,x和y的行数一样,该操作得到一个新的dataframe,
该dataframe是x和y拼合而成,行数与x/y的行数相同,列数为x和y的列数和。
例:

 > x<-c(1:10) > y<-x^2 > newdata<-data.frame(x,y) > head(newdata) x y 1 1 1 2 2 4 3 3 9 4 4 16 5 5 25 6 6 36 > z<-c(2:11) > newdata<-data.frame(newdata, z) > head(newdata) x y z 1 1 1 2 2 2 4 3 3 3 9 4 4 4 16 5 5 5 25 6 6 6 36 7 

(2)cbind(x,y)
等同于data.frame(x,y)

(3)rbind(x,y)
x,y均为data.frame,要求x和y的列向量个数一致,该操作得到一个新的dataframe,
该dataframe是x和y的数据拼接起来,行数等于x和y的行数之和,列数等于x/y的列数
例:

 > t<-c(0,0,0) > newdata<-rbind(newdata, t) > newdata x y z 1 1 1 2 2 2 4 3 3 3 9 4 4 4 16 5 5 5 25 6 6 6 36 7 7 7 49 8 8 8 64 9 9 9 81 10 10 10 100 11 11 0 0 0 
 

3.筛选数据
(1)subset:从一个dataframe中筛选出符合条件的数据

 > newdata x y z 1 1 1 2 2 2 4 3 3 3 9 4 4 4 16 5 5 5 25 6 6 6 36 7 7 7 49 8 8 8 64 9 9 9 81 10 10 10 100 11 11 0 0 0
 > newdata.subset<-subset(newdata, z>5) > newdata.subset x y z 5 5 25 6 6 6 36 7 7 7 49 8 8 8 64 9 9 9 81 10 10 10 100 1
 > subset(newdata, z>6&x>8) x y z 9 9 81 10 10 10 100 11
 > subset(newdata, z>6|x!=0) x y z 1 1 1 2 2 2 4 3 3 3 9 4 4 4 16 5 5 5 25 6 6 6 36 7 7 7 49 8 8 8 64 9 9 9 81 10 10 10 100 11 
 

(2)transform:对一个dataframe做一些变换

 > newdata.tran x y z newx 1 1 1 2 -1 2 2 4 3 -2 3 3 9 4 -3 4 4 16 5 -4 5 5 25 6 -5 6 6 36 7 -6 7 7 49 8 -7 8 8 64 9 -8 9 9 81 10 -9 10 10 100 11 -10 11 0 0 0 0 > newdata.tran<-transform(newdata, newx=-x, newy=log(y)) > newdata.tran x y z newx newy 1 1 1 2 -1 0.000000 2 2 4 3 -2 1.386294 3 3 9 4 -3 2.197225 4 4 16 5 -4 2.772589 5 5 25 6 -5 3.218876 6 6 36 7 -6 3.583519 7 7 49 8 -7 3.891820 8 8 64 9 -8 4.158883 9 9 81 10 -9 4.394449 10 10 100 11 -10 4.605170 11 0 0 0 0 -Inf
 
 
 4.去除重复数据
 

 > x<-c(1,0,1,0); > y<-c(0,0,1,0) > test<-data.frame(x,y) > test x y 1 1 0 2 0 0 3 1 1 4 0 0 > duplicated(test) [1] FALSE FALSE FALSE TRUE

 > test1<-test[which(!duplicated(test)),] > test1 x y 1 1 0 2 0 0 3 1 1 

5.两种数据按照指定key聚合
(1)merge > z # z是一个dataframe

x y
1 1 5
2 2 9
3 3 4

> w # w是一个dataframe
w1 w2
1 5 2.5
2 4 2.0
3 9 3.0

现在想将w的第二列按照z的第二列和w的第一列的对应关系合并到z里面
即变成:
x y w2
1 1 5 2.5
2 2 9 3.0
3 3 4 2.0

merge(z, w, by.x='y', by.y='w1', sort=F)
  y x  w2
1 5 1 2.5
2 9 2 3.0
3 4 3 2.0
  6.数据聚合,融合(需要载入reshape包) 
  (1)melt(data, id.vars, measure.vars)
data以id.vars指定的列为key,将measure.vars指定的列做拆分,以前的key->a1,a2,...aN 拆成 key->a1, key->a2, ..., key->aN。在拆分 的时候增加一个label,表明a1,a2,...,aN来源于以前的data中的哪一列。
例:df是一个dataframe,包含x,y坐标,对应的label,以及用logit和svm预测的结果,我们希望按照x,y把一行数据按照label,logit,svm拆成三行数据,分别用不同的标号代表来源于label、logit还是svm,然后用另外一个标号表示原来label,logit,svm的取值,因此原来2500行的数据会被拆分成7500个(2500*3),同时原来5列变量变成4列变量(x,y,值来源于哪一列,该列的取值)
 > head(df) X Y Label Logit SVM 1 0.2655087 0.52601906 1 0 1 2 0.3721239 0.07333542 1 0 1 3 0.5728534 0.84974175 1 0 1 4 0.9082078 0.42305801 0 0 0 5 0.2016819 0.98809607 0 0 1 6 0.8983897 0.47887413 0 0 0 > dim(df) [1] 2500 5 > predictions <- melt(df, id.vars = c('X', 'Y')) > head(predictions) X Y variable value 1 0.2655087 0.52601906 Label 1 2 0.3721239 0.07333542 Label 1 3 0.5728534 0.84974175 Label 1 4 0.9082078 0.42305801 Label 0 5 0.2016819 0.98809607 Label 0 6 0.8983897 0.47887413 Label 0 > dim(predictions) [1] 7500 4 > table(predictions$variable) Label Logit SVM 2500 2500 250 
 
(2)cast
 

head(installations)
# Package User Installed
#1 abind 1 1
#2 AcceptanceSampling 1 0
#3 ACCLMA 1 0
#4 accuracy 1 1
#5 acepack 1 0
#6 aCGH.Spline 1 0 # Ninth code snippet
library('reshape') # user和Package构成一个矩阵,矩阵的数值用installed列对应的数填充,即matrix(i,j)表示用户i是否有安装packagej
user.package.matrix <- cast(installations, User ~ Package, value = 'Installed') user.package.matrix[, 1] # 第一列表示user的编号
# [1] 1 3 4 5 6 7 8 9 11 13 14 15 16 19 21 23 25 26 27 28 29 30 31 33 34
#[26] 35 36 37 40 41 42 43 44 45 46 47 48 49 50 51 54 55 56 57 58 59 60 61 62 63
#[51] 64 65 user.package.matrix[, 2] # 后面n列表示每个user是否有按照某个Package包
# [1] 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 1 1 1 1 1 0 1 0 1 0 1 1 1 1 1 1
#[39] 1 1 1 1 1 1 1 1 0 1 1 1 1 1

在使用R做数据挖掘时,最常用的数据结构莫过于dataframe了,下面列出几种常见的dataframe的操作方法的更多相关文章

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

    对于初学R语言的人,最常见的方式是:遇到不会的地方,就跑到论坛上吼一嗓子,然后欣然or悲伤的离去,一直到遇到下一个问题再回来.当然,这不是最好的学习方式,最好的方式是——看书.目前,市面上介绍R语言的 ...

  2. 一篇文章教你如何用R进行数据挖掘

    一篇文章教你如何用R进行数据挖掘 引言 R是一种广泛用于数据分析和统计计算的强大语言,于上世纪90年代开始发展起来.得益于全世界众多 爱好者的无尽努力,大家继而开发出了一种基于R但优于R基本文本编辑器 ...

  3. 一小时了解数据挖掘⑤数据挖掘步骤&常用的聚类、决策树和CRISP-DM概念

    一小时了解数据挖掘⑤数据挖掘步骤&常用的聚类.决策树和CRISP-DM概念 接前面系列4篇: 一小时了解数据挖掘①:解析常见的大数据应用案例 一小时了解数据挖掘②:分类算法的应用和成熟案例解析 ...

  4. 例举在诊断Oracle性能问题时,常用的工具、方法

    例举在诊断Oracle性能问题时,常用的工具.方法 解答: 1)简单一点的可以用toad及dbartisan这样的工具. 2)纯做性能监测,比较出色的有spolight和emc的I3,这两个软件都比较 ...

  5. 做dg时遇到的log_archive_dest、log_archive_dest_1、db_recovery_file_dest之间互相影响

    前提:归档开启.默认不指定归档文件夹. 今晚遇到客户那里设置了闪回区和log_archive_dest.不停库做DG时,无法指定log_archive_dest_n參数,巨坑. .实验了下.结论例如以 ...

  6. 复习做UWP时涉及到的几种加密签名相关

    本人菜鸟一枚,大学里凭兴趣学了一点WP的皮毛,后来又幸运(或者不幸)的进了一家专注于Windows生态的公司做了一段时间的UWP.在博客园写点自己遇到的东西,作为分享,也作为自己的备忘,如果有错误的地 ...

  7. MySQL做练习时总结的一些知识点

    MySQL做练习时总结的一些知识点     0:mysql有三种注释方法 上午插入记录的时候一直没有成功,郁闷不知道为什么.因为是很多条记录一起插入,中间一些不用的数据就用"--" ...

  8. 使用C++做算法时,对内存的管理的办法

    使用C++做算法时,对内存的管理的办法 最近老是在想C++的内存控制机制,查了一些资料所以有点想法,自己记录一下免得以后自己忘了. 1. 需求 在做线性代数的算法时,首要的就实现Matrix这个类.由 ...

  9. angular中service封装$http做权限时拦截403等状态及获取验证码倒计时、跨域问题解决

    封装$http.做权限时拦截403等状态及获取验证码倒计时: 拦截接口返回状态 var app = angular.module('app'); app.factory('UserIntercepto ...

随机推荐

  1. Ubuntu Pycharm不能同时选中多行解决方法

    转自http://blog.csdn.net/yaoqi_isee/article/details/77866309 问题描述 Pycharm和Sublime有一个很好用的特性就是可以同时选中多行进行 ...

  2. C/S程序的一般流程和基本socket函数

    一.基于TCP协议的网络程序 下图是基于TCP协议的客户端/服务器程序的一般流程: 服务器调用socket().bind().listen()完成初始化后,调用accept()阻塞等待,处于监听端口的 ...

  3. Linux内核(15) - 方法论

    什么是方法论 方法论给人的第一感觉就是它是一个玄之又玄的很朦胧的东西,显然,学习本身就是一件很玄乎的事情,有些人整天潇潇洒洒没见怎么用心就能够获得很好的成绩,而有些人则相反,投悬梁锥刺骨也还是成绩平平 ...

  4. HDU 5092 DP

    DP水题 求从上到下走完,使所取得权值最小,并输出路径,若有多个满足,则输出靠右的 #include "stdio.h" #include "string.h" ...

  5. Oracle 11gR2数据库使用

    1很奇怪,不太懂原理 一.Oracle 12c创建用户是出现“ORA-65096: invalid common user or role name”的错误 - CalvinR http://www. ...

  6. 使用matlab处理图像的基础知识

    MATLAB基本函数一 矩阵运算 1.基本算数运算(加减乘除) + -运算要求矩阵维数相同,例m*n * /运算,例A=B*C,B矩阵是m*n矩阵,B是n*p矩阵,则A是m*p矩阵 A/B相当于A*i ...

  7. django1.8高级视图和URL配置读书笔记

    一.在url配置中可以通过导入视图函数来将url模式和对应的函数对象进行映射,也可以通过字符串的形式进行映射.字符串包含应当是模块名.函数名的组合例如: 之前: from mysite import ...

  8. unity 查看prefab层次

    点那个箭头,可以展开:

  9. linux ssh_config和sshd_config配置文件

    在远程管理linux系统基本上都要使用到ssh,原因很简单:telnet.FTP等传输方式是‍以明文传送用户认证信息,本质上是不安全的,存在被网络窃听的危险.SSH(Secure Shell)目前较可 ...

  10. [hihoCoder] #1089 : 最短路径·二:Floyd算法

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 万圣节的中午,小Hi和小Ho在吃过中饭之后,来到了一个新的鬼屋! 鬼屋中一共有N个地点,分别编号为1..N,这N个地点之间 ...