写点什么

东哥和刘亦菲的故事

用户头像
张利东
关注
发布于: 2020 年 05 月 19 日

1. 问题

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

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

2. 分析

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



有些数据是单一数据类型(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 aLevels: 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 aLevels: 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 aLevels: a b c
复制代码

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

2.5. DataFrame

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

比如

> df = data.frame(a, b, f)> df       a   b f1    101 102 a2    102 103 b3    103 104 c4 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     unl1    1012    1023    1034 python5    1016    1027    1038      1> dav = as.data.frame(unl)> dav     unl1    1012    1023    1034 python5    1016    1027    1038      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

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

本文使用 mdnice 排版


发布于: 2020 年 05 月 19 日阅读数: 59
用户头像

张利东

关注

运筹学与商业统计硕士 2019.02.13 加入

运筹学与商业统计硕士,擅长数据分析、数据挖掘、机器学习。欢迎关注公众号「统计与数据科学」Data2Science。

评论 (1 条评论)

发布
用户头像
有点标题党哟~
2020 年 05 月 19 日 16:58
回复
没有更多了
东哥和刘亦菲的故事