DataFrame 是 R 中的基础数据结构,提供数据分析和操作所需的结构、多功能性和工具。 它们的重要性延伸到各个领域,包括统计、数据科学和跨行业的数据驱动决策。
数据框架提供了解锁见解并以系统且高效的方式做出数据驱动决策所需的结构和组织。
R 中的 DataFrame 的结构类似于表格,具有行和列。 每行代表一个观察值,每列代表一个变量。 这种结构使得组织和处理数据变得容易。 DataFrame 可以保存各种数据类型,包括数字、文本和日期,使其具有多种用途。
在本文中,我将解释数据框的重要性并讨论使用 data.frame() 函数创建它们。
此外,我们将探索操作数据的方法,并介绍如何从 CSV 和 Excel 文件创建、将其他数据结构转换为数据框架以及如何使用 tibble 库。
以下是 DataFrame 在 R 中至关重要的一些关键原因:
目录
数据框的重要性
- 结构化数据存储:DataFrame 提供了一种结构化的表格方式来存储数据,就像电子表格一样。 这种结构化格式简化了数据管理和组织。
- 混合数据类型:DataFrame 可以在同一结构中容纳不同的数据类型。 您可以拥有包含数值、字符串、因子、日期等的列。 在处理现实世界的数据时,这种多功能性至关重要。
- 数据组织:DataFrame 中的每一列代表一个变量,而每一行代表一个观察或案例。 这种结构化布局可以轻松理解数据的组织,提高数据清晰度。
- 数据导入和导出:DataFrames 支持从各种文件格式(如 CSV、Excel 和数据库)轻松导入和导出数据。 此功能简化了使用外部数据源的过程。
- 互操作性:DataFrame 受到 R 包和函数的广泛支持,确保与其他统计和数据分析工具和库的兼容性。 这种互操作性允许无缝集成到 R 生态系统中。
- 数据操作:R 提供了丰富的软件包生态系统,“dplyr”就是一个突出的例子。 这些包使使用 DataFrame 过滤、转换和汇总数据变得容易。 此功能对于数据清理和准备至关重要。
- 统计分析:DataFrame 是 R 中许多统计和数据分析函数的标准数据格式。您可以使用 DataFrame 有效地执行回归、假设检验和许多其他统计分析。
- 可视化:R 的数据可视化包(例如 ggplot2)可以与 DataFrame 无缝协作。 这使得创建用于数据探索和通信的信息丰富的图表和图形变得简单。
- 数据探索:DataFrames 通过汇总统计、可视化和其他分析方法促进数据探索。 这有助于分析师和数据科学家了解数据的特征并检测模式或异常值。
如何在 R 中创建数据框
在 R 中创建 DataFrame 有多种方法。以下是一些最常见的方法:
#1. 使用 data.frame() 函数
# Load the necessary library if not already loaded if (!require("dplyr")) { install.packages("dplyr") library(dplyr) } # install.packages("dplyr") library(dplyr) # Set a seed for reproducibility set.seed(42) # Create a sample sales DataFrame with real product names sales_data <- data.frame( OrderID = 1001:1010, Product = c("Laptop", "Smartphone", "Tablet", "Headphones", "Camera", "TV", "Printer", "Washing Machine", "Refrigerator", "Microwave Oven"), Quantity = sample(1:10, 10, replace = TRUE), Price = round(runif(10, 100, 2000), 2), Discount = round(runif(10, 0, 0.3), 2), Date = sample(seq(as.Date('2023-01-01'), as.Date('2023-01-10'), by="days"), 10) ) # Display the sales DataFrame print(sales_data)
让我们了解一下我们的代码将做什么:
销售数据框
这是在 R 中创建 DataFrame 最简单的方法之一。我们还将探讨如何提取、添加、删除和选择特定的列或行,以及如何汇总数据。
提取列
有两种方法可以从数据框中提取必要的列:
- 要检索 R 中 DataFrame 的最后三列,可以使用索引。
- 当您想按名称访问各个列时,可以使用 $ 运算符从 DataFrame 中提取列。
为了节省时间,我们将同时查看两者:
# Extract the last three columns (Discount, Price, and Date) from the sales_data DataFrame last_three_columns <- sales_data[, c("Discount", "Price", "Date")] # Display the extracted columns print(last_three_columns) ############################################# OR ######################################################### # Extract the last three columns (Discount, Price, and Date) using the $ operator discount_column <- sales_data$Discount price_column <- sales_data$Price date_column <- sales_data$Date # Create a new DataFrame with the extracted columns last_three_columns <- data.frame(Discount = discount_column, Price = price_column, Date = date_column) # Display the extracted columns print(last_three_columns)
您可以使用这些代码中的任何一个来提取必要的列。
您可以使用各种方法从 R 中的 DataFrame 中提取行。 这是一个简单的方法:
# Extract specific rows (rows 3, 6, and 9) from the last_three_columns DataFrame selected_rows <- last_three_columns[c(3, 6, 9), ] # Display the selected rows print(selected_rows)
您还可以使用指定条件:
# Extract and arrange rows that meet the specified conditions selected_rows <- sales_data %>% filter(Discount < 0.3, Price > 100, format(Date, "%Y-%m") == "2023-01") %>% arrange(OrderID) %>% select(Discount, Price, Date) # Display the selected rows print(selected_rows)
提取的行
添加新行
要向 R 中的现有 DataFrame 添加新行,可以使用 rbind() 函数:
# Create a new row as a data frame new_row <- data.frame( OrderID = 1011, Product = "Coffee Maker", Quantity = 2, Price = 75.99, Discount = 0.1, Date = as.Date("2023-01-12") ) # Use the rbind() function to add the new row to the DataFrame sales_data <- rbind(sales_data, new_row) # Display the updated DataFrame print(sales_data)
添加新行
添加新列
您可以使用简单的代码在 DataFrame 中添加列。 在这里,我想将“付款方式”列添加到我的数据中。
# Create a new column "PaymentMethod" with values for each row sales_data$PaymentMethod <- c("Credit Card", "PayPal", "Cash", "Credit Card", "Cash", "PayPal", "Cash", "Credit Card", "Credit Card", "Cash", "Credit Card") # Display the updated DataFrame print(sales_data)
在数据框中添加的列
删除行
如果您想删除不必要的行,此方法可能会有所帮助:
# Identify the row to be deleted by its OrderID row_to_delete <- sales_data$OrderID == 1010 # Use the identified row to exclude it and create a new DataFrame sales_data <- sales_data[!row_to_delete, ] # Display the updated DataFrame without the deleted row print(sales_data)
删除列
您可以使用 dplyr 包从 R 中的 DataFrame 中删除列。
# install.packages("dplyr") library(dplyr) # Remove the "Discount" column using the select() function sales_data <- sales_data %>% select(-Discount) # Display the updated DataFrame without the "Discount" column print(sales_data)
获取摘要
要获取 R 中数据的摘要,您可以使用summary() 函数。 此函数提供数据中数值变量的集中趋势和分布的快速概览。
# Obtain a summary of the data data_summary <- summary(sales_data) # Display the summary print(data_summary)
您可以按照以下几个步骤来操作 DataFrame 中的数据。
让我们继续使用第二种方法来创建 DataFrame。
#2. 从 CSV 文件创建 R DataFrame
要从 CSV 文件创建 R DataFrame,您可以使用 read.csv()
# Read the CSV file into a DataFrame df <- read.csv("my_data.csv") # View the first few rows of the DataFrame head(df)
此函数从 CSV 文件读取数据并进行转换。 然后,您可以根据需要使用 R 中的数据。
# Install and load the readr package if not already installed if (!requireNamespace("readr", quietly = TRUE)) { install.packages("readr") } library(readr) # Read the CSV file into a DataFrame df <- read_csv("data.csv") # View the first few rows of the DataFrame head(df)
您可以使用 readr 包在 R 中读取 CSV 文件。readr 包中的 read_csv() 函数通常用于此目的。 它比常规方法更快。
#3。 使用 as.data.frame() 函数
您可以使用 as.data.frame() 函数在 R 中创建 DataFrame。 此函数允许您将其他数据结构(例如矩阵或列表)转换为 DataFrame。
使用方法如下:
# Create a nested list to represent the data data_list <- list( OrderID = 1001:1011, Product = c("Laptop", "Smartphone", "Tablet", "Headphones", "Camera", "TV", "Printer", "Washing Machine", "Refrigerator", "Microwave Oven", "Coffee Maker"), Quantity = c(1, 5, 1, 9, 10, 4, 2, 10, 1, 8, 2), Price = c(1875.88, 585.31, 978.36, 1886.03, 1958.63, 323.23, 1002.49, 1164.63, 1817.66, 363.55, 75.99), Discount = c(0.3, 0.28, 0.02, 0.15, 0.12, 0.27, 0.13, 0.25, 0.22, 0.24, 0.1), Date = as.Date(c("2023-01-08", "2023-01-03", "2023-01-02", "2023-01-01", "2023-01-10", "2023-01-09", "2023-01-05", "2023-01-06", "2023-01-04", "2023-01-07", "2023-01-12")), PaymentMethod = c("Credit Card", "PayPal", "Cash", "Credit Card", "Cash", "PayPal", "Cash", "Credit Card", "Credit Card", "Cash", "Credit Card") ) # Convert the nested list to a DataFrame sales_data <- as.data.frame(data_list) # Display the DataFrame print(sales_data)
销售数据
此方法允许您创建 DataFrame,而无需一一指定每一列,并且当您拥有大量数据时特别有用。
#4。 从现有的数据框
要通过从 R 中的现有 DataFrame 中选择特定的列或行来创建新的 DataFrame,可以使用方括号 [] 用于索引。 它的工作原理如下:
# Select rows and columns sales_subset <- sales_data[c(1, 3, 4), c("Product", "Quantity")] # Display the selected subset print(sales_subset)
在此代码中,我们创建一个名为 sales_subset 的新 DataFrame,其中包含 sales_data 中的特定行(1、3 和 4)和特定列(“Product”和“Quantity”)。
您可以调整行和列索引以及名称来选择您需要的数据。
销售_子集
#5。 从向量
向量是 R 中的一维数据结构,由相同数据类型的元素组成,包括逻辑、整数、双精度、字符、复数或原始数据。
另一方面,R DataFrame 是一种二维结构,旨在以包含行和列的表格格式存储数据。 有多种方法可以从向量创建 R DataFrame,下面提供了一个这样的示例。
# Create vectors for each column OrderID <- 1001:1011 Product <- c("Laptop", "Smartphone", "Tablet", "Headphones", "Camera", "TV", "Printer", "Washing Machine", "Refrigerator", "Microwave Oven", "Coffee Maker") Quantity <- c(1, 5, 1, 9, 10, 4, 2, 10, 1, 8, 2) Price <- c(1875.88, 585.31, 978.36, 1886.03, 1958.63, 323.23, 1002.49, 1164.63, 1817.66, 363.55, 75.99) Discount <- c(0.3, 0.28, 0.02, 0.15, 0.12, 0.27, 0.13, 0.25, 0.22, 0.24, 0.1) Date <- as.Date(c("2023-01-08", "2023-01-03", "2023-01-02", "2023-01-01", "2023-01-10", "2023-01-09", "2023-01-05", "2023-01-06", "2023-01-04", "2023-01-07", "2023-01-12")) PaymentMethod <- c("Credit Card", "PayPal", "Cash", "Credit Card", "Cash", "PayPal", "Cash", "Credit Card", "Credit Card", "Cash", "Credit Card") # Create the DataFrame using data.frame() sales_data <- data.frame( OrderID = OrderID, Product = Product, Quantity = Quantity, Price = Price, Discount = Discount, Date = Date, PaymentMethod = PaymentMethod ) # Display the DataFrame print(sales_data)
在此代码中,我们为每一列创建单独的向量,然后使用 data.frame() 函数将这些向量组合到名为 sales_data 的 DataFrame 中。
这允许您从 R 中的各个向量创建结构化表格数据框。
#6。 从 Excel 文件
要通过在 R 中导入 Excel 文件来创建 DataFrame,您可以使用 readxl 等第三方包,因为基础 R 不提供对读取 CSV 文件的本机支持。 read_excel() 是读取 Excel 文件的此类函数之一。
# Load the readxl library library(readxl) # Define the file path to the Excel file excel_file_path <- "your_file.xlsx" # Replace with the actual file path # Read the Excel file and create a DataFrame data_frame_from_excel <- read_excel(excel_file_path) # Display the DataFrame print(data_frame_from_excel)
此代码将读取 Excel 文件并将其数据存储在 R DataFrame 中,从而允许您在 R 环境中使用数据。
#7. 从文本文件
您可以使用 R 中的 read.table() 函数将文本文件导入到 DataFrame 中。 此函数需要两个基本参数:您要读取的文件名和指定如何分隔文件中字段的分隔符。
# Define the file name and delimiter file_name <- "your_text_file.txt" # Replace with the actual file name delimiter <- "\t" # Replace with the actual delimiter (e.g., "\t" for tab-separated, "," for CSV) # Use the read.table() function to create a DataFrame data_frame_from_text <- read.table(file_name, header = TRUE, sep = delimiter) # Display the DataFrame print(data_frame_from_text)
此代码将读取文本文件并在 R 中创建它,使其可在 R 环境中进行数据分析。
#8。 使用蒂布尔
要使用提供的向量创建它并利用 tidyverse 库,您可以按照以下步骤操作:
# Load the tidyverse library library(tidyverse) # Create a tibble using the provided vectors sales_data <- tibble( OrderID = 1001:1011, Product = c("Laptop", "Smartphone", "Tablet", "Headphones", "Camera", "TV", "Printer", "Washing Machine", "Refrigerator", "Microwave Oven", "Coffee Maker"), Quantity = c(1, 5, 1, 9, 10, 4, 2, 10, 1, 8, 2), Price = c(1875.88, 585.31, 978.36, 1886.03, 1958.63, 323.23, 1002.49, 1164.63, 1817.66, 363.55, 75.99), Discount = c(0.3, 0.28, 0.02, 0.15, 0.12, 0.27, 0.13, 0.25, 0.22, 0.24, 0.1), Date = as.Date(c("2023-01-08", "2023-01-03", "2023-01-02", "2023-01-01", "2023-01-10", "2023-01-09", "2023-01-05", "2023-01-06", "2023-01-04", "2023-01-07", "2023-01-12")), PaymentMethod = c("Credit Card", "PayPal", "Cash", "Credit Card", "Cash", "PayPal", "Cash", "Credit Card", "Credit Card", "Cash", "Credit Card") ) # Display the created sales tibble print(sales_data)
此代码使用 tidyverse 库中的 tibble() 函数创建一个名为 sales_data 的 tibble DataFrame。 正如您所提到的,与默认的 R 数据框相比,tibble 格式提供了更多信息打印。
如何在 R 中高效使用 DataFrame
在 R 中有效使用 DataFrame 对于数据操作和分析至关重要。 DataFrame 是 R 中的基本数据结构,通常使用 data.frame 函数创建和操作。 以下是一些高效工作的技巧:
- 在创建之前,请确保您的数据干净且结构良好。 删除任何不必要的行或列,处理缺失值,并确保数据类型合适。
- 为您的列设置适当的数据类型(例如数字、字符、因子、日期)。 这可以提高内存使用率和计算速度。
- 使用索引和子集化来处理较小部分的数据。 子集()和 [ ] 运算符对于此目的很有用。
- 虽然 Attach() 和 detach() 很方便,但它们也可能导致歧义和意外行为。
- R 针对向量化运算进行了高度优化。 只要有可能,就使用向量化函数而不是循环来进行数据操作。
- R 中的嵌套循环可能会很慢。请尝试使用向量化操作或应用函数(例如 lapply 或 sapply),而不是嵌套循环。
- 大型 DataFrame 会消耗大量内存。 考虑使用 data.table 或 dtplyr 包,它们对于较大的数据集来说内存效率更高。
- R 有多种用于数据操作的包。 利用 dplyr、tidyr 和 data.table 等包进行高效的数据转换。
- 尽量减少全局变量的使用,尤其是在使用多个 DataFrame 时。 使用函数并传递 DataFrame 作为参数。
- 在处理聚合数据时,使用 dplyr 中的 group_by() 和 summarize() 函数可以高效地执行计算。
- 对于大型数据集,请考虑使用并行处理或 foreach 等包来加速操作。
- 将数据读入 R 时,请使用 readr 或 data.table::fread 等函数,而不是 read.csv 等基本 R 函数,以加快数据导入速度。
- 对于非常大的数据集,请考虑使用数据库系统或专门的存储格式,例如 Feather、Arrow 或 Parquet。
通过遵循这些最佳实践,您可以高效地使用 R 中的 DataFrame,使您的数据操作和分析任务更易于管理且更快。
最后的想法
在 R 中创建数据帧非常简单,并且您可以使用多种方法。 我强调了数据框的重要性,并讨论了使用 data.frame() 函数创建它们。
此外,我们还探讨了操作数据的方法,并介绍了如何从 CSV 和 Excel 文件创建、将其他数据结构转换为数据框架以及如何使用 tibble 库。
您可能对 R 编程的最佳 IDE 感兴趣。