文章目录
1. 读取⽂件格式:CSV
文件存在当前目录中
> data <- read.csv("input.csv")
> data
文件不在当前目录中,指定文件的完整路径
> data2 <- read.csv("C:/Users/86133/Desktop/RData/mtcars.csv")
> data2
读取csv文件后,数据将被存储在一个数据框中,并将分配给变量data
。您可以使用data
变量来访问和操作这些数据。
read.csv()
函数还有一些其他的参数,可以根据需要进行调整,以满足读取csv文件的特定要求。例如,您可以指定文件的分隔符、是否包含表头等。有关更多详细信息,您可以查阅R语言的官方文档或使用?read.csv
来获取帮助。
2. 数据框处理:⾏过滤,列过滤,排序,改名,计算列,分组统计,窗⼝统计
数据框的基本操作
数据框(data.frame)是一种非常常用的数据结构,用于存储和操作具有不同变量的数据
- 查看数据框的结构和摘要信息:
使用str()
函数可以查看数据框的结构,包括变量名称、类型、长度等。
> str(mtcars)
使用summary()
函数可以获取数据框的摘要统计信息,包括最小值、最大值、中位数等。
> summary(mtcars)
- 提取某一列的数据
可以使用$
符号加列名来提取数据框中的某一列数据。
> column <- mtcars$mpg
- 提取某一行的数据
可以使用索引或逻辑条件来提取数据框中的某一行数据。
# 根据索引提取第一行数据
> row <- mtcars[1,]
#根据逻辑条件提取满足条件的行数据
> subset_data <- mtcars[mtcars$mpg>5,]
- 添加新列或者修改已有列
可以通过$
符号给数据框添加新的列。
> mtcars$new_column <- data.frame(runif(32,10,50))
#修改已有列的值 (这一列的名字为column_name)
mtcars$column_name <- data.frame(runif(32,10,50)
- 根据条件筛选数据:
使用逻辑条件来筛选数据框中满足条件的多行数据。
subset_data <- data[data$column_name > 10 & data$column_name < 20, ]
- 排序数据框:
使用order()
函数按照某一列的值对数据框进行排序。
sorted_data <- data[order(data$column_name), ]
数据框的行过滤
- 基于条件的行过滤:使用逻辑条件来过滤数据框的行。例如,假设我们有一个名为"df"的数据框,其中有一个名为"age"的列,我们可以使用条件过滤只选择age大于等于18的行:
filtered_df <- df[df$age >= 18, ]
- 使用subset()函数进行行过滤:subset()函数可以根据指定的条件过滤数据框的行。例如,我们可以使用subset()函数选择age大于等于18的行:
filtered_df <- subset(df, age >= 18)
- 使用dplyr包进行行过滤:dplyr包提供了一系列函数来进行数据框操作,其中filter()函数用于行过滤。使用filter()函数可以按照指定条件进行行过滤。例如,使用dplyr包过滤age大于等于18的行:
library(dplyr)
filtered_df <- filter(df, age >= 18)
上述方法中,df代表原始的数据框,age代表要过滤的列名,18是过滤的条件。filtered_df是过滤后得到的数据框。根据实际需求选择适合的方法进行行过滤。
数据框的列过滤
- 使用 符号进行列过滤: 符号进行列过滤: 符号进行列过滤:符号可以用于选择数据框中的特定列。例如,假设我们有一个名为"df"的数据框,其中有一个名为"age"的列,我们可以使用$符号选择"age"列:
filtered_df <- df$age
- 使用索引进行列过滤:可以使用列的索引位置来选择数据框中的特定列。例如,假设我们有一个名为"df"的数据框,其中有三列,我们可以使用列的索引位置来选择第二列:
filtered_df <- df[, 2]
- 使用subset()函数进行列过滤:subset()函数除了可以进行行过滤,还可以进行列过滤。可以使用subset()函数选择指定的列。例如,假设我们有一个名为"df"的数据框,其中有两列"age"和"gender",我们可以使用subset()函数选择这两列:
filtered_df <- subset(df, select = c(age, gender))
- 使用dplyr包进行列过滤:dplyr包也提供了一系列函数来进行数据框操作,其中select()函数用于列过滤。使用select()函数可以选择指定的列。例如,使用dplyr包选择"age"和"gender"两列:
library(dplyr)
filtered_df <- select(df, age, gender)
上述方法中,df代表原始的数据框,age和gender代表要选择的列名。filtered_df是过滤后得到的数据框或列。根据实际需求选择适合的方法进行列过滤。
数据框中对数据进行排序
- 使用order()函数进行排序:order()函数可以用于对向量、数据框或矩阵进行排序。该函数返回一个按照指定顺序排序后的索引向量。例如,假设我们有一个名为"vec"的向量,可以使用order()函数对其进行升序排序:
sorted_vec <- vec[order(vec)]
- 使用sort()函数进行排序:sort()函数可以用于对向量进行排序。默认情况下,它会对向量进行升序排序。例如,假设我们有一个名为"vec"的向量,可以使用sort()函数对其进行升序排序:
sorted_vec <- sort(vec)
- 使用arrange()函数进行排序(使用dplyr包):arrange()函数是dplyr包中的函数,用于对数据框按照指定的变量进行排序。例如,假设我们有一个名为"df"的数据框,其中有一个名为"age"的列,可以使用arrange()函数按照age进行升序排序:
library(dplyr)
sorted_df <- arrange(df, age)
- 使用order_by()函数进行排序(使用dplyr包):order_by()函数是dplyr包中的函数,用于对数据框按照指定的变量进行排序。与arrange()函数不同的是,order_by()函数返回排序后的数据框而不是索引。例如,可以使用order_by()函数按照age进行升序排序:
library(dplyr)
sorted_df <- order_by(df, age)
上述方法中,vec代表要排序的向量,df代表要排序的数据框,age代表要排序的列名。sorted_vec或sorted_df是排序后得到的向量或数据框。根据实际需求选择适合的方法进行排序操作。
数据框的改名操作
- 使用
names()
函数进行改名:names()
函数可以用于对向量、列表、数据框等对象的元素或列名进行改名。例如,假设我们有一个名为"vec"的向量,可以使用names()
函数对其元素进行改名:
names(vec) <- c("new_name1", "new_name2", ...)
- 使用
colnames()
或rownames()
函数对数据框或矩阵的列名或行名进行改名:colnames()
函数用于改变数据框的列名,rownames()
函数用于改变数据框或矩阵的行名。例如,假设我们有一个名为"df"的数据框,可以使用colnames()
函数对其列名进行改名:
colnames(df) <- c("new_colname1", "new_colname2", ...)
- 使用
dimnames()
函数对矩阵的维度名称进行改名:dimnames()
函数可以用于改变矩阵的行名和列名(维度名称)。例如,假设我们有一个名为"mat"的矩阵,可以使用dimnames()
函数对其行名和列名进行改名:
dimnames(mat) <- list(c("new_rowname1", "new_rowname2", ...), c("new_colname1", "new_colname2", ...))
- 使用
rename()
函数进行改名(使用dplyr包):rename()
函数是dplyr包中的函数,用于对数据框的列名进行改名。例如,假设我们有一个名为"df"的数据框,其中有一个名为"old_colname"的列,可以使用rename()
函数对该列名进行改名:
library(dplyr)
df <- rename(df, new_colname = old_colname)
上述方法中,vec代表要改名的向量,df代表要改名的数据框,mat代表要改名的矩阵。“new_name1”, "new_colname1"等是改名后的名称。
数据框中对列的计算
- 求和:使用
sum()
函数对列中的值进行求和。例如,假设我们有一个名为"df"的数据框,其中有一列名为"col1",可以使用sum()
函数计算该列的总和:
total <- sum(df$col1)
- 平均值:使用
mean()
函数计算列的平均值。例如,假设我们有一个名为"df"的数据框,其中有一列名为"col1",可以使用mean()
函数计算该列的平均值:
average <- mean(df$col1)
- 中位数:使用
median()
函数计算列的中位数。例如,假设我们有一个名为"df"的数据框,其中有一列名为"col1",可以使用median()
函数计算该列的中位数:
median_value <- median(df$col1)
- 最小值和最大值:使用
min()
和max()
函数分别计算列的最小值和最大值。例如,假设我们有一个名为"df"的数据框,其中有一列名为"col1",可以使用min()
和max()
函数计算该列的最小值和最大值:
minimum <- min(df$col1)
maximum <- max(df$col1)
- 标准差和方差:使用
sd()
函数计算列的标准差,使用var()
函数计算列的方差。例如,假设我们有一个名为"df"的数据框,其中有一列名为"col1",可以使用sd()
和var()
函数计算该列的标准差和方差:
standard_deviation <- sd(df$col1)
variance <- var(df$col1)
数据框中的分组统计
aggregate()
函数:可以按照一个或多个变量对数据进行分组,并对指定的变量进行统计。例如,计算每个"Species"(物种)的平均"Sepal.Length"(花萼长度):
aggregate(Sepal.Length ~ Species, data = iris, FUN = mean)
tapply()
函数:根据指定的因子或变量将数据分组,并对其他变量进行统计。例如,计算每个"Species"(物种)中"Sepal.Length"(花萼长度)的平均值:
tapply(iris$Sepal.Length, iris$Species, FUN = mean)
by()
函数:根据指定的因子或变量将数据分组,并对每个组应用指定的函数。例如,计算每个"Species"(物种)中"Sepal.Length"(花萼长度)的最大值:
by(iris$Sepal.Length, iris$Species, FUN = max)
split()
函数:根据指定的因子或变量将数据分组为一个列表,每个组对应一个列表元素。例如,将数据根据"Species"(物种)分组:
split(iris, iris$Species)
dplyr
包中的函数:dplyr
包提供了一组用于数据操作和分组统计的函数,例如group_by()
、summarise()
、mutate()
等。以下是一个使用dplyr
包进行按"Species"(物种)分组并计算每个组中"Sepal.Length"(花萼长度)平均值的例子:
library(dplyr)
iris %>%
group_by(Species) %>%
summarise(mean_Sepal_Length = mean(Sepal.Length))
数据框的窗口统计
窗口统计是一种对数据进行滑动窗口操作,并对每个窗口中的数据进行统计计算的方法
zoo
包:zoo
包提供了用于处理时间序列数据的函数和数据结构。其中包括rollapply()
函数,可以对滑动窗口中的数据应用指定的函数。例如,计算每个窗口中的均值:
library(zoo)
rollapply(data, width, FUN = mean)
TTR
包:TTR
包是Technical Trading Rules的缩写,提供了计算技术分析指标的函数。其中包含了一些窗口统计函数,例如SMA()
函数用于计算简单移动平均线。例如,计算每个窗口的简单移动平均值:
library(TTR)
SMA(data, n = width)
widyr
包:widyr
包提供了用于处理文本数据的窗口统计函数。其中包括text_window()
函数,可以对文本数据中的窗口进行统计。例如,计算每个窗口的词频统计:
library(widyr)
data %>%
unnest_tokens(word, text) %>%
text_window(word, index, width) %>%
count
3. 整洁数据规则(⽆⾏名,⼀列⼀特征,⼀⾏⼀观测):不把可变的观测值作为列
-
每个变量形成一列:每个变量都应该在数据集中形成单独的列。例如,一列表示年龄,一列表示性别,一列表示收入等。
-
每个观察结果形成一行:每个观察结果都应该作为一行记录在数据集中。例如,数据集的每一行代表一个个体或一个观察单位。
-
每个值只能属于一个单元格:每个值都应该放在相应变量的单元格中。避免将多个值放在同一个单元格中。
-
表示一个类型的多个变量放在一起:如果多个变量都属于同一类型,可以将它们合并成一个变量,并创建一个额外的列来标识它们。
-
变量名称应该是描述性的:变量名称应该清晰简洁,能够准确描述其含义。
-
数据集应该只包含一个观察单位:数据集中的每一行记录应该代表一个唯一的观察单位。避免混合不同层次或类型的观察单位。
遵循这些整洁数据规则可以使数据更易于理解、处理和分析。可以使用R中的一些包和函数,如tidyverse
包中的函数(例如tidyr::gather()
、tidyr::spread()
和dplyr::mutate()
等)来帮助整理和转换数据,使其符合整洁数据规则。