东哥和刘亦菲的故事

212 阅读3分钟

1. 问题

R 语言作为统计学家御用语言,数据类型和语法规则和常见的给程序员使用的编程语言多有不同。不能说人家坏,只是不适合。

就像东哥就是刘亦菲永远都得不到的人(^_−)☆。

2. 分析

先丢下咱的刘亦菲,继续聊聊 R 语言这些怪异的数据类型。下面这个表格很清楚的显示了R语言常见复合数据类型

Homogeneous Heterogeneous
1D Vector List
2D Matrix DataFrame
nD Array /

有些数据是单一数据类型(Homogeneous),有些是复合数据类型(Heterogeneous)。

2.1. Vector

Vector 是R里面最基础的数据类型。简单的话可以理解成一组同质数据组成的数组。 Vector 可以用c函数创建。c代表 combine,可以把多个数据合并成一个数据。例如

> avec = c(1, 2, 3)
[1] 1 2 3

Vector 可以进行集合运算。比如

> b = a+100
[1] 101 102 103
> b + a
[1] 102 104 106

2.2. Factor

Factor 可以看做 Integer Vector 加上 Label。比如

> f = factor(c('a', 'b', 'c', 'a'))
> f
[1] a b c a
Levels: a b c
> str(f)
 Factor w/ 3 levels "a","b","c": 1 2 3 1

可以看出,最后的 f 是整数类型的一个 Vector,实质上是1/2/3/,但是用 Level 里面的 Label 做了标记,界面更友好。

艾玛,天知道可视化的时候 factor 帮了多大忙!

2.3. matrix

matrix 是单一类型组成的二维变量,比如

> mat = matrix(c('a', 'b', 1, 2), nrow=2)
> mat
     [,1] [,2]
[1,] "a"  "1" 
[2,] "b"  "2" 

因为 a/b 是字符变量,1/2也只好委曲求全。

2.4. List

List 可以包含多种数据类型,来者不拒,摘到篮子里的都是菜。比如

> list1 = list(a = a, b= b, f = f)
> list1
$a
[1] "101"    "102"    "103"    "python"

$b
[1] 101 102 103

$f
[1] a b c a
Levels: a b c

> list2 = list(a, b, f)
> list2
[[1]]
[1] "101"    "102"    "103"    "python"

[[2]]
[1] 101 102 103

[[3]]
[1] a b c a
Levels: a b c

可见,指定命名就可以用$访问,否则就只能用[[]]访问。

2.5. DataFrame

DataFrame 不用多说,R 里面最常用的数据类型。可以简单的理解为Excel表格的数据库,各列可以有不同类型的数据,但列内类型必须一致。

比如

> df = data.frame(a, b, f)
> df
       a   b f
1    101 102 a
2    102 103 b
3    103 104 c
4 python 105 a
> class(df)
[1] "data.frame"
> class(df$a)
[1] "factor"
> class(df$b)
[1] "numeric"
> class(df$f)
[1] "factor"

3. 转换

了解了规则,就了解了转换规则。

比如,list 是 1D的,但可以包含复合类型。转换的时候最好用unlist转换成vector,再做其他考虑。

vector 性格单纯,可做多样使用。最常见的是转换成 DataFrame,比如

> dfv = data.frame(unl)
> dfv
     unl
1    101
2    102
3    103
4 python
5    101
6    102
7    103
8      1
> dav = as.data.frame(unl)
> dav
     unl
1    101
2    102
3    103
4 python
5    101
6    102
7    103
8      1
> dav == dfv
      unl
[1,] TRUE
[2,] TRUE
[3,] TRUE
[4,] TRUE
[5,] TRUE
[6,] TRUE
[7,] TRUE
[8,] TRUE

4. 总结

今天我们大致总结了 R 的数据类型及其转换方法。虽然 R 比较怪,但仔细想想,谁又不怪呢?人群中,你我皆是异类。

就比如,东哥是刘亦菲永远都得不到的人,所以在东哥看来,刘亦菲也挺怪的。

所以,东哥和刘亦菲之间有什么故事?没有,互相 Diss 罢。

如果她能 Diss 到我的话。

5. 交流

独学而无友则孤陋寡闻。现有「数据与统计科学」微信交流群,内有数据行业资深从业人员、海外博士、硕士等,欢迎对数据科学、数据分析、机器学习、人工智能有兴趣的朋友加入,一起学习讨论。

大家可以扫描下面二维码,添加荔姐微信邀请加入,暗号:机器学习加群。

Lily
Lily

6. 扩展

6.1. 参考文献

  1. Dr. P. Prakash和A. S. K. Rao, R Data Structures and Algorithms. 2016.
  2. H. Wickham和G. Grolemund, R for data science: import, tidy, transform, visualize, and model data, First edition. Sebastopol, CA: O’Reilly, 2016.

Data2Science
Data2Science

本文使用 mdnice 排版