R:数据处理常用包
dplyr data.table
dplyr data.table对比
dplyr参考
数据处理经常用到的包
dplyr
,data.table
,Base R
,tidyverse
数据处理一般的流程:
1.数据过滤(去重)
2.选择
3.比对,匹配
4.分组
5.排序
6.抽样
在excel中也可以完成上述操作,但是当数量达到十万以上级别后,excel速度慢如蜗牛。
dplyr用法示例
数据去重
distinct(df,V1,V2)
根据V1和V2两个条件来进行去重
新增列
mutate(df,vnew1=v1-v2,vnew2=vnew1+v3)
支持在创建的新列的基础上,再新建列。
过滤函数
filter(df,cond1,cond2,…)
用逗号,隔开表示条件是and的关系
filter(df,cond1|cond2|…)
用竖线|隔开表示条件是or的关系
slice(df,80:100)
选取索引80到100的数据
排序
arrange(df,V1,desc(V2),V3)
V1,V3升序,V2降序
arranage(df,V1)
升序排列V1
arrange(df,desc(V3))
降序排列V3
选择
select(df,V1,V2,V3)
选择V1,V2,V3这三列
select(df,V1:V3)
选择V1到V3列之间的所有列
select(df,-c(v1,V3))
选择除V1,V3之外的所有列
分组
group_by(df,V1,V2)
df根据V1,V2进行分组
计算统计数据
summarise(df,mean(V1),sum(V4))
随机抽取
sample_n(df,1000)
随机抽取1000个数据
sample_frac(df,0.7)
随机抽取70%的数据
参考地址https://www.cnblogs.com/nxld/p/6060533.html
数据格式转换tidyr包
library(tidyr)
library(dplyr)
- 缺失值的简单补齐
- 长形表变宽形表与宽形表变长形表
gather-把宽度较大的数据转换成一个更长的形式,它类比于从reshape2包中融合函数的功能
spread-把长的数据转换成一个更宽的形式,它类比于从reshape2包中铸造函数的功能。
gather()相反的是spread(),前者将不同的列堆叠起来,后者将同一列分开
- 长形表变宽形表与宽形表变长形表
长短数据的转换主要是用于ggplot2的出图,ggplot2需要的是长数据,而我们日常输入的数据是宽数据
宽数据实例
下面数据的第一列数字是R中的行号
allinfo
内容如下
province primary middle senior higher postgraduate
1 北京 109.4579 110.5105 96.20949 98.91572 107.82594
2 天津 113.4776 114.0266 94.79238 99.90067 88.54674
3 河北 114.6299 113.0214 91.19643 87.67520 81.96543
4 山西 107.9786 108.3219 92.03961 82.94410 73.76735
5 内蒙古 109.1339 108.9091 92.13359 89.96668 67.54206
6 辽宁 110.3081 110.8525 91.70425 112.46839 87.90451
allinfoNew
内容如下
转换成长数据后
allinfoNew <- allinfo %>% gather(school,value, -province)
将allinfo的所有列,除了province列之外全部合并成两列,一列是school,一列是value.
province school value
1 北京 primary 109.45794
2 天津 primary 113.47760
3 河北 primary 114.62993
4 山西 primary 107.97863
5 内蒙古 primary 109.13391
6 辽宁 primary 110.30810
7 北京 middle 110.51045
8 天津 middle 114.02665
9 河北 middle 113.02139
10 山西 middle 108.32195
11 内蒙古 middle 108.90907
12 辽宁 middle 110.85252
13 北京 senior 96.20949
14 天津 senior 94.79238
15 河北 senior 91.19643
16 山西 senior 92.03961
17 内蒙古 senior 92.13359
18 辽宁 senior 91.70425
19 北京 higher 98.91572
20 天津 higher 99.90067
21 河北 higher 87.67520
22 山西 higher 82.94410
23 内蒙古 higher 89.96668
24 辽宁 higher 112.46839
25 北京 postgraduate 107.82594
26 天津 postgraduate 88.54674
27 河北 postgraduate 81.96543
28 山西 postgraduate 73.76735
29 内蒙古 postgraduate 67.54206
30 辽宁 postgraduate 87.90451
长数据转为宽数据
allinfoFat <- allinfoNew %>% spread(school,value)
allinfoFat
和allinfo的内容一致。
school是要拆分的列的对象,value是要拆分列的值。
- 列分割与列合并
separate-将一列按分隔符分割为多列
unite-将多列按指定分隔符合并为一列
- 列分割与列合并
tidyr包:(gather(宽数据转为长数据)、spread(长数据转为宽数据)、unit(多列合并为一列)、separate(将一列分离为多列))