R语言数据对象包括以下几种:向量(vector),列表(list),矩阵(matrix),数组(array),因子(factor),数据框(data.frame)
其实R语言的向量、列表;矩阵、数组、数据库等看上去结构是一样的,但是背后代表着不同的运算逻辑与计算规则,因此需要时刻记得一个变量代表的是什么内容。
空值NA 与 缺失值NULL
NA 代表的是缺失值,也可作为占位符;
NULL 代表的是"不存在";
向量(vector)
向量使用c()
来创建,内容只能是 TRUE
/FALSE
或 数字类型;可以对向量做加减乘除与均值方差运算等。
例1:
a = c(1,2,3,4)
print(a)
# [1] 1 2 3 4
例2:
a = seq(1, 11, 2) # 生成等差数列
print(a) # 1 3 5 7 9 11
print(a[1]) # 1 ,R语言下标是从1开始的
print(mean(a)) # 均值:6
print(sd(a)) # 标准差:3.741657
print(var(a)) # 方差:14
列表(list)
列表中什么内容都可以包含
例1:
x = list("abc",123,c(1,2,3))
print(x)
显示列表内容:
[[1]]
[1] "abc"
[[2]]
[1] 123
[[3]]
[1] 1 2 3
上面的 x
有3个内容,添加一个内容的方法:
x[4] = "123"
直接使用新索引赋值,就可以添加了,如果在没有第4个元素的基础上使用x[5] = "123"
,那么会自动把第4个元素赋值为NULL
,第5个元素为"123"
。
删除第4个元素:
x[4] = NULL
矩阵(matrix)
创建矩阵:
test_matrix = matrix(
c(1:12), # 数据从1到12,再次注意,R语言下标从1开始
nrow = 4, # 4行,如果数据无法被 nrow 整除,会报错 data length [xx] is not a sub-multiple or multiple of the number of rows [xx]
byrow = TRUE, # byrow 为逻辑值, FALSE 按列排列,为 TRUE 按行排列
dimnames =
list(
c("row1", "row2", "row3", "row4"), # 行标签
c("col1", "col2", "col3") # 列标签
)
)
访问元素:
print(test_matrix[,3]) # 3列
print(test_matrix[4,2]) # 4行2列
print(test_matrix[2,]) # 2行
注:矩阵课直接使用加减乘除做运算,运算结果也为矩阵运算结果。
数组(array)
数组可以认为是根据给定的一堆不尽相同的向量,一下子构造一大堆矩阵的方法
vector1 = c(5,9,3)
vector2 = c(10,11,12,13,14,15)
vector3 = c(1,2,3,4,5)
array1 = array(c(vector1,vector2,vector3),dim = c(2,4,2))
访问数组内容:
array1[1,2,1] # 数组[行,列,第几个矩阵]
使用apply()
函数可以快速计算多个矩阵相同位置的元素:
apply(array1, c(1), sum) # 计算第一行的和
因子(factor)
因子就是one-hot
编码或是value_counts()
等,指的是一组数中不同的因素,例:
data <- c("a","b","c","a","c","c","a","a","b","d","d")
print(data)
print(is.factor(data)) # 判断是否为factor
factor_data <- factor(data) # 使用factor()函数直接提取不同值
print(factor_data)
print(is.factor(factor_data))
数据框(data.frame)
数据框能够直观地表示各种二维表格类的数据,比如我们常见的excel
总是有千奇百怪的内容,它们统统能塞进data.frame
中
my_data = data.frame(
姓名 = c("A", "B"),
工号 = c("001","002"),
月薪 = c(1000, 2000)
)
print(summary(my_data)) # 打印相关内容
选择数据:
my_data[1,] # 第一行
my_data$姓名 # 姓名这一列
my_data[,2] # 第二列
增加:
my_data$部门 = c("运营","管理")
删除:
my_data$姓名 = NULL