R语言数据结构(三)数据框

这篇具有很好参考价值的文章主要介绍了R语言数据结构(三)数据框。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据结构是指在计算机中存储和组织数据的方式,不同的数据结构有不同的特点和适用场景。R语言中的常用数据结构,包括向量、矩阵、数组、列表和数据框。关于数据结构的使用,我们将分四篇文章分别介绍每种数据结构的操作方法和代码示例。

为方便大家理解记忆,对每种数据结构的基本操作概括为四大类:

  1. 创建数据结构
  2. 往里面添加数据
  3. 从里面查询数据
  4. 对里面的数据进行修改

这篇文章我们将介绍数据框的使用

目录

数据框

创建数据框

访问数据框

修改数据框

合并数据框

删除数据框


数据框

数据框是R语言中的一种类似于表格的数据结构,它是由一系列相同长度的向量组成的有序集合。数据框有两个维度,分别表示行数和列数,可以用dim()函数来获取。数据框中的每个向量可以有一个名称,可以用names()函数来获取或设置。数据框中的每个向量可以是不同的类型,但同一列的元素必须是相同的类型。

创建数据框

创建数据框的一种常用方法是使用data.frame()函数,它可以将多个向量组合成一个数据框。data.frame()函数的参数有:

  • ...: 这些参数可以采用valuetag = value的形式。组件名称将基于tag(如果存在)或被解析的参数本身。
  • row.names: 可以是NULL、单个整数或字符字符串,用于指定用作行名的列,或者是字符或整数向量,提供数据框的行名。
  • check.rows: 若为TRUE,则会检查行的长度和名称是否一致。
  • check.names: 逻辑值。若为TRUE,则会检查数据框中变量的名称,以确保它们是符合语法规范的变量名称且不重复。必要时,会进行调整(通过make.names函数)。
  • fix.empty.names: 逻辑值,指示是否为“未命名”的参数(指的是未被正式命名为someName = arg的参数)自动生成一个名称,还是使用名称""。即使check.names为FALSE,如果要保留""作为名称,也需要将此参数设置为FALSE。
  • stringsAsFactors: 逻辑值,指定是否将字符向量转换为因子向量。在R 4.0.0之前,默认设置是TRUE,但现在已更改为FALSE。

例如:


df1 <- data.frame(name = c("Alice", "Bob", "Charlie"), 
                  age = c(20, 25, 30), 
                  gender = c("F", "M", "M"))
df1
#      name age gender
# 1   Alice  20      F
# 2     Bob  25      M
# 3 Charlie  30      M

# 使用两个向量创建一个数据框,并给每行命名
df2 <- data.frame(score = c(90, 80, 70), 
                  grade = c("A", "B", "C"), 
                  row.names = c("Math", "English", "History"))
df2
#         score grade
# Math       90     A
# English    80     B
# History    70     C

# 使用两个向量创建一个数据框,并不将字符向量转换为因子向量
df3 <- data.frame(color = c("red", "green", "blue"), 
                  code = c("#FF0000", "#00FF00", "#0000FF"), 
                  stringsAsFactors = FALSE)
df3
#   color    code
# 1   red #FF0000
# 2 green #00FF00
# 3  blue #0000FF

数据框有两个维度,即行和列,可以用dim()函数获取。而数据框的行名和列名分别对应着数据框的行和列的标识符,可以用row.names()和colnames()函数来获取和设置。

  • 行名:数据框的每一行都有一个行名,用于标识不同的行。行名是一个字符向量,可以通过row.names()函数获取或设置。
  • 列名:数据框的每一列都有一个列名,用于标识不同的列。列名是一个字符向量,可以通过colnames()函数获取或设置。

下面是一些关于数据框行名和列名的示例代码:

# 创建示例数据框
df <- data.frame(
  name = c("Alice", "Bob", "Charlie"),
  age = c(20, 25, 30),
  gender = c("F", "M", "M")
)

df
#      name age gender
# 1   Alice  20      F
# 2     Bob  25      M
# 3 Charlie  30      M

# 获取数据框的行名和列名
row_names <- row.names(df)
col_names <- colnames(df)

cat("数据框的行名:\n")
row_names
# 输出:
# 数据框的行名:
# [1] "1" "2" "3"

cat("数据框的列名:\n")
col_names

# 数据框的列名:
# [1] "name"   "age"    "gender"

# 修改数据框的行名和列名
# 设置新的行名和列名
new_row_names <- c("row1", "row2", "row3")
new_col_names <- c("姓名", "年龄", "性别")

# 使用row.names()和colnames()函数设置新的行名和列名
row.names(df) <- new_row_names
colnames(df) <- new_col_names

cat("修改后的数据框:\n")
df
# 输出:
# 修改后的数据框:
#       姓名 年龄 性别
# row1 Alice  20   F
# row2   Bob  25   M
# row3 Charlie  30   M

访问数据框

访问数据框中的元素可以使用方括号[]和行列索引号或名称。行列索引号从1开始,表示第一行或第一列,负数表示排除对应位置的元素。名称是指数据框中每个向量的名称,可以用双引号或单引号包围。使用方括号[]访问数据框中的元素时,返回的结果仍然是一个数据框。例如:


# 访问df1数据框中的第一行
df1[1, ]
#    name age gender
# 1 Alice  20      F

# 访问df2数据框中的"score"列
df2["score"]
#         score
# Math       90
# English    80
# History    70

如果想要访问数据框中的元素的值,而不是一个数据框,可以使用双方括号[[]]或者美元符号$。例如:


# 访问df1数据框中的第一行的值
df1[[1]]
#  [1] "Alice" "Bob"   "Charlie"


# 访问df2数据框中的"score"列的值
df2$score
# [1] 90 80 70

如果数据框中的元素是一个向量,可以在双方括号[[]]或者美元符号$后面加上方括号[]和相应的索引号来访问子元素。例如:


# 访问df1数据框中的第一列(一个向量)的第二个子元素
df1[[1]][2]
# [1] "Bob"

# 访问df2数据框中的"grade"列(一个向量)的第三个子元素
df2$grade[3]
# [1] C

修改数据框

修改数据框中的元素可以使用赋值符号<-或者等号=。例如:


# 修改df1数据框中的第二行为c("David", 28, "M")
df1[2, ] <- c("David", 28, "M")
df1
#      name age gender
# 1   Alice  20      F
# 2   David  28      M
# 3 Charlie  30      M

# 修改df2数据框中的"grade"列为c("A+", "B+", "C+")
df2["grade"] <- c("A+", "B+", "C+")
df2
#         score grade
# Math       90    A+
# English    80    B+
# History    70    C+

# 修改df3数据框中的第一行第二列的元素为"#FFFFFF"
df3[1, 2] <- "#FFFFFF"
df3
#   color    code
# 1   red #FFFFFF
# 2 green #00FF00

为数据框增加一列


# 假设有一个数据框df_add
df_add <- data.frame(name = c("Alice", "Bob", "Charlie"),
                 age = c(20, 25, 30),
                 gender = c("F", "M", "M"))
df_add
#      name age gender
# 1   Alice  20      F
# 2     Bob  25      M
# 3 Charlie  30      M

# 要增加一列"city",包含每个人对应的城市信息
city <- c("New York", "London", "Tokyo")

# 使用赋值符号<-给数据框增加新列
df_add$city <- city

# 查看增加列后的数据框
df_add
#      name age gender     city
# 1   Alice  20      F New York
# 2     Bob  25      M   London
# 3 Charlie  30      M    Tokyo

合并数据框

我们可以用rbind()cbind()函数来按行或列合并数据框,参数是两个或多个数据框,它们必须有相同的列数或行数。例如:

# 创建两个数据框
d1 <- data.frame(name = c("Alice", "Bob"), age = c(20, 21))
d1
#    name age
# 1 Alice  20
# 2   Bob  21

d2 <- data.frame(name = c("Charlie", "David"), age = c(22, 23))
d2
#      name age
# 1 Charlie  22
# 2   David  23

# 按行合并两个数据框
d3 <- rbind(d1, d2)
# 查看合并后的数据框内容
d3
#      name age
# 1   Alice  20
# 2     Bob  21
# 3 Charlie  22
# 4   David  23

# 创建两个数据框
d4 <- data.frame(name = c("Alice", "Bob"), gender = c(TRUE, FALSE))
d4
#    name gender
# 1 Alice   TRUE
# 2   Bob  FALSE

d5 <- data.frame(age = c(20, 21), city = c("New York", "London"))
d5
#   age     city
# 1  20 New York
# 2  21   London

# 按列合并两个数据框
d6 <- cbind(d4, d5)
# 查看合并后的数据框内容
d6
# 输出结果
#    name gender age    city
# 1 Alice   TRUE  20 New York
# 2   Bob  FALSE  21   London

删除数据框

下面示例代码展示了如何使用负数索引和subset()函数在R语言中删除数据框中的行或列,并在每个操作后注释了相应的输出结果。请注意,这些操作都会生成新的数据框,并不会对原始数据框进行修改。文章来源地址https://www.toymoban.com/news/detail-791715.html


# 创建示例数据框
df <- data.frame(
  name = c("Alice", "Bob", "Charlie", "David"),
  age = c(20, 25, 30, 28),
  gender = c("F", "M", "M", "M")
)

# 输出原始数据框
cat("原始数据框:\n")
print(df)

# 原始数据框:
#      name age gender
# 1   Alice  20      F
# 2     Bob  25      M
# 3 Charlie  30      M
# 4   David  28      M

# 删除行
# 删除数据框中的第一行
df_deleted_row <- df[-1, ]
cat("删除第一行后的数据框:\n")
print(df_deleted_row)

# 删除第一行后的数据框:
#      name age gender
# 2     Bob  25      M
# 3 Charlie  30      M
# 4   David  28      M

# 使用subset函数根据条件删除行(删除年龄为25岁的行)
df_deleted_age <- subset(df, age != 25)
cat("根据条件删除age为25岁的行后的数据框:\n")
print(df_deleted_age)

# 根据条件删除age为25岁的行后的数据框:
#      name age gender
# 1   Alice  20      F
# 3 Charlie  30      M
# 4   David  28      M

# 删除列
# 删除数据框中的gender列
df_deleted_column <- df[, -3]
cat("删除gender列后的数据框:\n")
print(df_deleted_column)

# 删除gender列后的数据框:
#      name age
# 1   Alice  20
# 2     Bob  25
# 3 Charlie  30
# 4   David  28

# 使用subset函数根据条件删除列(删除age列)
df_deleted_age_column <- subset(df, select = -c(age))
cat("根据条件删除age列后的数据框:\n")
print(df_deleted_age_column)

# 根据条件删除age列后的数据框:
#      name gender
# 1   Alice      F
# 2     Bob      M
# 3 Charlie      M
# 4   David      M

到了这里,关于R语言数据结构(三)数据框的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包