习惯了语法严谨的高级语言,例如Java、Javascript,切换到R语言,理解其数据对象之间的转换绝不是件容易的事。
在R语言中,向量是最基本的原子类型,不能通过$表达式获取相关属性,否则将出现以下错误:
Error in xs$levels : $ operator is invalid for atomic vectors
1. 因子与向量互转
weekdays <- c('星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日')
# 向量转换为因子
xs <- factor(weekdays,
levels = c('星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'))
因子是有强烈的顺序特性的,如果通过c()方法直接抓取,将会返回序数向量。
# 直接转换
> c(xs)
[1] 1 2 3 4 5 6 7
# 通过转换函数切换
> as.vector(xs)
# 返回原始因子信息
[1] "星期一" "星期二" "星期三" "星期四" "星期五" "星期六" "星期日"
2. 向量转换为矩阵(matrix)
# 再声明一个向量
ys <- c(5, 7, 8, 3, 2, 1, 10)
# 将多个向量合并为矩阵
# 首先合并向量
y4 <- c(as.vector(xs), ys)
# 设置行与列
dim(y4) <- c(7, 2)
# 输出y4
> y4
[,1] [,2]
[1,] "一" "5"
[2,] "二" "7"
[3,] "三" "8"
[4,] "四" "3"
[5,] "五" "2"
[6,] "六" "1"
[7,] "日" "10"
3. 提取矩阵中的某一列向量
# 提取第一列
> y4[1:7]
# 提取第二列
> y4[8:14]
当然也可以获取矩阵动态信息,如下:
# 获取矩阵总长度
> length(y4)
[1] 14
# 获取矩阵列数
> length(dim(y4))
[1] 2
4. 用索引提取List
# 结果为List
salary <- read.table('graph/weekday.csv',
header = TRUE,
sep = ',',
quote = '\"')
## 利用索引提取List信息
xSeries <- salary["日期"]
ySeries <- salary["事件数量"]
> attributes(salary)
$names
[1] "日期" "事件数量" "浪费金额"
$class
[1] "data.frame"
$row.names
[1] 1 2 3 4 5 6 7
结论
熟练操作数据对象是学好R语言的基础,其中向量是最基本的原子,不知道怎么转换时,将其转换为向量准没错,然后再对其进行需要的合并与转换。