数据结构及其基本操作

矩阵

定义一个矩阵

在R语言中,有几种定义矩阵的方法。我来为您介绍最常用的几种:使用 matrix() 函数:

1.  使用 `matrix()` 函数:

```{r}

# 基本语法:matrix(data, nrow, ncol, byrow = FALSE)

# 创建一个2行3列的矩阵

matrix1 <- matrix(c(1,2,3,4,5,6), nrow=2, ncol=3)

print(matrix1)

# 按行填充数据 (byrow = TRUE)

matrix2 <- matrix(c(1,2,3,4,5,6), nrow=2, ncol=3, byrow=TRUE)

print(matrix2)

```

2.  使用向量转换:

```{r}

# 将两个向量组合成矩阵

x <- c(1,2,3)

y <- c(4,5,6)

matrix3 <- rbind(x,y)  # 按行绑定

print(matrix3)

matrix4 <- cbind(x,y)  # 按列绑定

print(matrix4)

```

3.  创建特殊矩阵:

```{r}

# 创建单位矩阵

diag_matrix <- diag(3)  # 3x3的单位矩阵

print(diag_matrix)

# 创建全零矩阵

zero_matrix <- matrix(0, nrow=2, ncol=3)

print(zero_matrix)

```

注意事项:

-   矩阵中的所有元素必须是相同的数据类型。

-   默认情况下,矩阵是按列填充的(byrow=FALSE)。

-   可以使用 dim()函数查看矩阵的维度。

-   可以使用rownames()和 colnames()为矩阵的行和列命名。

示例:

```{r}

创建一个带有行名和列名的矩阵

m <- matrix(1:9, nrow=3, ncol=3)

rownames(m) <- c("row1", "row2","row3")

colnames(m) <- c("col1", "col2", "col3")

print(m)

```

矩阵的基本操作

```{r}

# 提取矩阵中的元素

m[1,]# 提取矩阵m中的第1行元素

m[2,2]# 提取矩阵m中的第2行第2列元素

m[1:2,]# 提取矩阵m中的第1行和第2行元素

m[1:2,c(1,3)]# 提取矩阵m中的第1行、第2行、第1列和第3列元素

```

数组

数组的结构特点

-   数组指维数超过2的数据结构类型。

-   向量和矩阵可以看作特殊的数组。

-   和矩阵一样,数组中要求所有数据模式(类型)要一致。

-   数组是按列优先的方式进行数据填充。

创建数组的函数格式如下:\

myarray \<- array(vector, dimensions, dimnames)

```{r}

dim1 <- c("A1", "A2")

dim2 <- c("B1", "B2", "B3")

dim3 <- c("C1", "C2", "C3", "C4")

z1 <- array(1:24, c(2, 3, 4))

z1

```

```{r}

z2 <- array(data=1:24, dim=c(2, 3, 4),dimnames=list(dim1, dim2, dim3))#为行、列和维数(层)命名

z2

```

数组的基本操作

```{r}

z2[1,2,3] # 提取数组中的第3层第1行第2列元素(按行、列、层的顺序,首先选择层)

```

```{r}

# 随着维数的增加,dim向量也会相应的增加。下面的4维数据可以看作是由多个3维数据构成的团块。

dw <- array(data = rep(1:24,times = 3), dim = c(3,4,2,3)) #其中的参数分别指行、列、层和块数。

dw

```

数据框

数据框结构

```{r}

# 使用data.frame()函数创建数据框

#mydata <- data.frame(col1, col2, col3,...)

```

```{r}

patientID <- c(1, 2, 3, 4)

age <- c(25, 34, 28, 52)

diabetes <- c("Type1", "Type2", "Type1", "Type1")

status <- c("Poor", "Improved", "Excellent", "Poor")

patientdata <- data.frame(patientID, age, diabetes, status)

patientdata

```

```{r}

names(patientdata)#查看列名

```

选取变量(元素):

```{r}

patientdata[1:2]

#注意,patientdata[1:2,]为选取前两行的所有列。

patientdata[1:2,]

patientdata[c("patientID", "age")]

patientdata$age

```

```{r}

#用table()函数产生交联表

table(patientdata$diabetes, patientdata$status)

```

```{r}

#用with()函数概括数据,进行多个操作。

with(mtcars,{

  summary(mpg)

  plot(mpg,disp)

  plot(mpg,wt)

  })

```

```{r}

用with()函数概括数据

patientdata <- data.frame(patientID, age, diabetes, status, row.names=patientID)

with(patientdata,{

  patient_age <- summary(age)#或用summary(patientdata$age)

  patient_age1<<- summary(age)

})

```

```{r}

patient_age1#注意在with()括号外运行patient_age时会报错,需用<<-符号。

#patient_age 显示错误: 找不到对象'patient_age'

```

- 定义行名

```{r}

#指定某个变量名为行名

patientdata <- data.frame(patientID, age, diabetes, status, row.names=patientID)

patientdata

```

```{r}

#自定义行名

patientdata <- data.frame(patientID, age, diabetes, status, row.names=c("a","b","c","d"))

patientdata

```

或用letters\[\]选取小写字母,LETTERS\[\]选取大写字母:

```{r}

patientdata <- data.frame(patientID, age, diabetes, status, row.names=c(LETTERS[1:4]))

patientdata

```

数据框的基本操作

-   用edit()和fix()互动编辑器操作数据

```{r}

#用edit()编辑数据并保存到新对象file1

#file1 <- edit(patientdata)

#file1

```

```{r}

#fix(patientdata)

```

-   显示数据结构信息

```{r}

str(patientdata)

nrow(patientdata)

ncol(patientdata)

```

-   提取数据

```{r}

#提取前两行

patientdata[1:2,]

#提取最后两列

patientdata[,-1:-2]

```

-   添加数据(列)

```{r}

patientdata$sex <- c("男","女","男","女")

patientdata

```

-   删除数据

```{r}

#删除变量

myvars <- names(patientdata) %in% c("sex", "status")

newdata <- patientdata[!myvars]

newdata

```

-   重命名变量名

```{r}

names(patientdata)

```

```{r}

names(patientdata)[2] <- "年龄"

patientdata

```


 

列表

```{r}

#对列表取子集,和向量的方法一样。向量的子集仍然是向量,使用[]提取列表的子集,总是返回列表。

l <- list(

  "one"   = c("a", "b", "c"),

  "two"   = c(1:5),

  "three" = c(TRUE, FALSE)

)

l

```

```{r}

l[1]#使用位置索引

l["two"]#也可用元素名索引

```

如果想提取列表某个变量的值,需要使用 \[\[ \]\]或$。

```{r}

l[[1]]

l[["two"]]

l$three

```

注意:[ ] 和[[ ]]的区别,x$y是x\[\["y"\]\]的简写

```{r}

x <- c(3, 5, NA, 2, NA)

# 使用is.na(x)检查向量元素是否为缺失值,并保存为新的对象x_missing

x_missing <- is.na(x)

x_missing

# 将所有缺失值赋值为0

x[is.na(x)] <- 0 # 或者用x <- replace(x, is.na(x), 0)

x

# 然后sum()计算

sum(x)


 

```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值