R语言之数据操作

数据读写

对离散变量,我们会观测变量各个层级观测的频数,或者使用两个变量的交叉表格,对离散变量绘制条形图等;
对连续变量,我们会看某个变量的均值,标准差,分位数等
此外,summary(),str(),describe(()等函数(psych包里)做义工数据框的总结。
以上即为一些最基础的方法,但这些方法灵活性不高,输出的信息也是固定的,这时我们需要对数据进行整形。
在整合和整形操作前,我们介绍一个新的可以取代数据框的对象,tibble,一个可以高效读取数据集的包readr。最后会介绍两个用于数据整形的包:reshape2和tidyr包

取代传统数据框的tibble对象

> library(tibble)
> library(tibble)
> library(ggplot2)
> sim.dat=read.csv("https://raw.githubusercontent.com/happyrabbit/DataScientistR/master/Data/SegData.csv")
> df=data.frame(x=c(1:5),y=rep("a",5))
> as_tibble(df)
# A tibble: 5 x 2
      x      y
  <int> <fctr>
1     1      a
2     2      a
3     3      a
4     4      a
5     5      a
> tibble(x=1:5,y=rep("a",5))
# A tibble: 5 x 2
      x     y
  <int> <chr>
1     1     a
2     2     a
3     3     a
4     4     a
5     5     a
> 
> tibble(x=1:5,y=1,z=x^2+y)
# A tibble: 5 x 3
      x     y     z
  <int> <dbl> <dbl>
1     1     1     2
2     2     1     5
3     3     1    10
4     4     1    17
5     5     1    26
> tb=tibble(':)'="smile",' '="space",'2000'="number")
> print(tb)
# A tibble: 1 x 3
   `:)`   ` ` `2000`
  <chr> <chr>  <chr>
1 smile space number
> 

特别,如果你在其他包中使用tibble对象中的变量也需要加单引号。
tibble和传统数据框的不同主要在于输出显示截取变量这两个方面
1.输出显示

> print(as_tibble(sim.dat))
# A tibble: 1,000 x 19
     age gender   income  house store_exp online_exp store_trans online_trans
   <int> <fctr>    <dbl> <fctr>     <dbl>      <dbl>       <int>        <int>
 1    57 Female 120963.4    Yes  529.1344   303.5125           2            2
 2    63 Female 122008.1    Yes  478.0058   109.5297           4            2
 3    59   Male 114202.3    Yes  490.8107   279.2496           7            2
 4    60   Male 113616.3    Yes  347.8090   141.6698          10            2
 5    51   Male 124252.6    Yes  379.6259   112.2372           4            4
 6    59   Male 107661.5    Yes  338.3154   195.6870           4            5
 7    57   Male 120483.3    Yes  482.5445   284.5363           5            3
 8    57   Male 110542.0    Yes  340.7368   135.2556          11            5
 9    61 Female 132060.5    Yes  608.2310   142.5503           6            1
10    60   Male 105048.8    Yes  470.3190   163.4663          12            1
# ... with 990 more rows, and 11 more variables: Q1 <int>, Q2 <int>, Q3 <int>,
#   Q4 <int>, Q5 <int>, Q6 <int>, Q7 <int>, Q8 <int>, Q9 <int>, Q10 <int>,
#   segment <fctr>

如上,它只展示头10行数据,而且会根据屏幕大小,自动调整列数,列名后还会显示每列的类型,更友好。
2.截取变量
从tibble对象中截取某一变量
"$""[["符号
“[[”符号能够通过变量的名字或位置指针来截取
“$”只能通过变量名截取
“%>%"(管道操作符)也可进行数据截取

sim.dat$age
sim.dat[["age"]]
sim.dat[[1]]
library(dplyr)
sim.dat%>%.$age
sim.dat%>%.[["age"]]

若用"$""[["操作符从数据框中截取一个变量时,截取的变量可能不是数据框形式,从而可能会引起程序运行错误,但是从tibble中截取任何一个变量依旧是一个tibble对象
注意:由于tibble对象比较新,所以在清理了数据之后要对数据建模的话,可以将tibble对象转换成原始数据框格式

sim.dat=as.data.frame(sim.dat)
class(sim.dat)

高效数据读写 readr包
readr包中用于读入数据的函数:
read_csv()读入逗号分隔文件
read_csv2()读入分号分隔文件
read_tsv()读人制表符分隔文件
read_delim()读入任意分隔符文件
其中,read_csv()涵盖了大部分的数据读入需求。

#skip=2表示跳过两行
> dat=read_csv("这行是一个样本数据
+ 这行只是注释
+ x,y,z
+ 1,2,3",skip=2)
> print(dat)
# A tibble: 1 x 3
      x     y     z
  <int> <int> <int>
1     1     2     3

> dat=read_csv("1,2,3\n4,5,6",col_names=FALSE)
> print(dat)
# A tibble: 2 x 3
     X1    X2    X3
  <int> <int> <int>
1     1     2     3
2     4     5     6

对于分号分隔文件读取read_csv2()

> dat=read_csv2("x;y;z\n1;2;3")

> print(dat)
# A tibble: 1 x 3
      x     y     z
  <int> <int> <int>
1     1     2     3

对于制表符分隔文件,read_tsv()

> dat1=read_tsv("x\ty\tz\n1\t2\t3")
> print(dat1)
# A tibble: 1 x 3
      x     y     z
  <int> <int> <int>
1     1     2     3

读入任意分隔符read_delim()

> dat2=read_delim("x|y|z\n1|2|3",delim=
+                     "|")
> print(dat2)
# A tibble: 1 x 3
      x     y     z
  <int> <
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值