文章目录

  • 空值NA 与 缺失值NULL
  • 向量(vector)
  • 列表(list)
  • 矩阵(matrix)
  • 数组(array)
  • 因子(factor)
  • 数据框(data.frame)


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