R中的数据框的操作

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)是一种非常常用的数据结构,用于存储和操作具有不同变量的数据

  1. 查看数据框的结构和摘要信息:

使用str()函数可以查看数据框的结构,包括变量名称、类型、长度等。

> str(mtcars)

使用summary()函数可以获取数据框的摘要统计信息,包括最小值、最大值、中位数等。

> summary(mtcars)
  1. 提取某一列的数据

可以使用$符号加列名来提取数据框中的某一列数据。

> column <-  mtcars$mpg
  1. 提取某一行的数据

可以使用索引或逻辑条件来提取数据框中的某一行数据。

# 根据索引提取第一行数据
> row <- mtcars[1,]

#根据逻辑条件提取满足条件的行数据
> subset_data <- mtcars[mtcars$mpg>5,]
  1. 添加新列或者修改已有列

可以通过$符号给数据框添加新的列。

> mtcars$new_column <- data.frame(runif(32,10,50))

#修改已有列的值 (这一列的名字为column_name)
mtcars$column_name <- data.frame(runif(32,10,50)
  1. 根据条件筛选数据:

使用逻辑条件来筛选数据框中满足条件的多行数据。

subset_data <- data[data$column_name > 10 & data$column_name < 20, ]
  1. 排序数据框:

使用order()函数按照某一列的值对数据框进行排序。

sorted_data <- data[order(data$column_name), ]

数据框的行过滤

  1. 基于条件的行过滤:使用逻辑条件来过滤数据框的行。例如,假设我们有一个名为"df"的数据框,其中有一个名为"age"的列,我们可以使用条件过滤只选择age大于等于18的行:
filtered_df <- df[df$age >= 18, ]
  1. 使用subset()函数进行行过滤:subset()函数可以根据指定的条件过滤数据框的行。例如,我们可以使用subset()函数选择age大于等于18的行:
filtered_df <- subset(df, age >= 18)
  1. 使用dplyr包进行行过滤:dplyr包提供了一系列函数来进行数据框操作,其中filter()函数用于行过滤。使用filter()函数可以按照指定条件进行行过滤。例如,使用dplyr包过滤age大于等于18的行:
library(dplyr)
filtered_df <- filter(df, age >= 18)

上述方法中,df代表原始的数据框,age代表要过滤的列名,18是过滤的条件。filtered_df是过滤后得到的数据框。根据实际需求选择适合的方法进行行过滤。

数据框的列过滤

  1. 使用 符号进行列过滤: 符号进行列过滤: 符号进行列过滤:符号可以用于选择数据框中的特定列。例如,假设我们有一个名为"df"的数据框,其中有一个名为"age"的列,我们可以使用$符号选择"age"列:
filtered_df <- df$age
  1. 使用索引进行列过滤:可以使用列的索引位置来选择数据框中的特定列。例如,假设我们有一个名为"df"的数据框,其中有三列,我们可以使用列的索引位置来选择第二列:
filtered_df <- df[, 2]
  1. 使用subset()函数进行列过滤:subset()函数除了可以进行行过滤,还可以进行列过滤。可以使用subset()函数选择指定的列。例如,假设我们有一个名为"df"的数据框,其中有两列"age"和"gender",我们可以使用subset()函数选择这两列:
filtered_df <- subset(df, select = c(age, gender))
  1. 使用dplyr包进行列过滤:dplyr包也提供了一系列函数来进行数据框操作,其中select()函数用于列过滤。使用select()函数可以选择指定的列。例如,使用dplyr包选择"age"和"gender"两列:
library(dplyr)
filtered_df <- select(df, age, gender)

上述方法中,df代表原始的数据框,age和gender代表要选择的列名。filtered_df是过滤后得到的数据框或列。根据实际需求选择适合的方法进行列过滤。

数据框中对数据进行排序

  1. 使用order()函数进行排序:order()函数可以用于对向量、数据框或矩阵进行排序。该函数返回一个按照指定顺序排序后的索引向量。例如,假设我们有一个名为"vec"的向量,可以使用order()函数对其进行升序排序:
sorted_vec <- vec[order(vec)]
  1. 使用sort()函数进行排序:sort()函数可以用于对向量进行排序。默认情况下,它会对向量进行升序排序。例如,假设我们有一个名为"vec"的向量,可以使用sort()函数对其进行升序排序:
sorted_vec <- sort(vec)
  1. 使用arrange()函数进行排序(使用dplyr包):arrange()函数是dplyr包中的函数,用于对数据框按照指定的变量进行排序。例如,假设我们有一个名为"df"的数据框,其中有一个名为"age"的列,可以使用arrange()函数按照age进行升序排序:
library(dplyr)
sorted_df <- arrange(df, age)
  1. 使用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是排序后得到的向量或数据框。根据实际需求选择适合的方法进行排序操作。

数据框的改名操作

  1. 使用names()函数进行改名:names()函数可以用于对向量、列表、数据框等对象的元素或列名进行改名。例如,假设我们有一个名为"vec"的向量,可以使用names()函数对其元素进行改名:
names(vec) <- c("new_name1", "new_name2", ...)
  1. 使用colnames()rownames()函数对数据框或矩阵的列名或行名进行改名:colnames()函数用于改变数据框的列名,rownames()函数用于改变数据框或矩阵的行名。例如,假设我们有一个名为"df"的数据框,可以使用colnames()函数对其列名进行改名:
colnames(df) <- c("new_colname1", "new_colname2", ...)
  1. 使用dimnames()函数对矩阵的维度名称进行改名:dimnames()函数可以用于改变矩阵的行名和列名(维度名称)。例如,假设我们有一个名为"mat"的矩阵,可以使用dimnames()函数对其行名和列名进行改名:
dimnames(mat) <- list(c("new_rowname1", "new_rowname2", ...), c("new_colname1", "new_colname2", ...))
  1. 使用rename()函数进行改名(使用dplyr包):rename()函数是dplyr包中的函数,用于对数据框的列名进行改名。例如,假设我们有一个名为"df"的数据框,其中有一个名为"old_colname"的列,可以使用rename()函数对该列名进行改名:
library(dplyr)
df <- rename(df, new_colname = old_colname)

上述方法中,vec代表要改名的向量,df代表要改名的数据框,mat代表要改名的矩阵。“new_name1”, "new_colname1"等是改名后的名称。

数据框中对列的计算

  1. 求和:使用sum()函数对列中的值进行求和。例如,假设我们有一个名为"df"的数据框,其中有一列名为"col1",可以使用sum()函数计算该列的总和:
total <- sum(df$col1)
  1. 平均值:使用mean()函数计算列的平均值。例如,假设我们有一个名为"df"的数据框,其中有一列名为"col1",可以使用mean()函数计算该列的平均值:
average <- mean(df$col1)
  1. 中位数:使用median()函数计算列的中位数。例如,假设我们有一个名为"df"的数据框,其中有一列名为"col1",可以使用median()函数计算该列的中位数:
median_value <- median(df$col1)
  1. 最小值和最大值:使用min()max()函数分别计算列的最小值和最大值。例如,假设我们有一个名为"df"的数据框,其中有一列名为"col1",可以使用min()max()函数计算该列的最小值和最大值:
minimum <- min(df$col1)
maximum <- max(df$col1)
  1. 标准差和方差:使用sd()函数计算列的标准差,使用var()函数计算列的方差。例如,假设我们有一个名为"df"的数据框,其中有一列名为"col1",可以使用sd()var()函数计算该列的标准差和方差:
standard_deviation <- sd(df$col1)
variance <- var(df$col1)

数据框中的分组统计

  1. aggregate()函数:可以按照一个或多个变量对数据进行分组,并对指定的变量进行统计。例如,计算每个"Species"(物种)的平均"Sepal.Length"(花萼长度):
aggregate(Sepal.Length ~ Species, data = iris, FUN = mean)
  1. tapply()函数:根据指定的因子或变量将数据分组,并对其他变量进行统计。例如,计算每个"Species"(物种)中"Sepal.Length"(花萼长度)的平均值:
tapply(iris$Sepal.Length, iris$Species, FUN = mean)
  1. by()函数:根据指定的因子或变量将数据分组,并对每个组应用指定的函数。例如,计算每个"Species"(物种)中"Sepal.Length"(花萼长度)的最大值:
by(iris$Sepal.Length, iris$Species, FUN = max)
  1. split()函数:根据指定的因子或变量将数据分组为一个列表,每个组对应一个列表元素。例如,将数据根据"Species"(物种)分组:
split(iris, iris$Species)
  1. dplyr包中的函数:dplyr包提供了一组用于数据操作和分组统计的函数,例如group_by()summarise()mutate()等。以下是一个使用dplyr包进行按"Species"(物种)分组并计算每个组中"Sepal.Length"(花萼长度)平均值的例子:
library(dplyr)
iris %>%
  group_by(Species) %>%
  summarise(mean_Sepal_Length = mean(Sepal.Length))

数据框的窗口统计

窗口统计是一种对数据进行滑动窗口操作,并对每个窗口中的数据进行统计计算的方法

  1. zoo包:zoo包提供了用于处理时间序列数据的函数和数据结构。其中包括rollapply()函数,可以对滑动窗口中的数据应用指定的函数。例如,计算每个窗口中的均值:
library(zoo)
rollapply(data, width, FUN = mean)
  1. TTR包:TTR包是Technical Trading Rules的缩写,提供了计算技术分析指标的函数。其中包含了一些窗口统计函数,例如SMA()函数用于计算简单移动平均线。例如,计算每个窗口的简单移动平均值:
library(TTR)
SMA(data, n = width)
  1. widyr包:widyr包提供了用于处理文本数据的窗口统计函数。其中包括text_window()函数,可以对文本数据中的窗口进行统计。例如,计算每个窗口的词频统计:
library(widyr)
data %>%
  unnest_tokens(word, text) %>%
  text_window(word, index, width) %>%
  count

3. 整洁数据规则(⽆⾏名,⼀列⼀特征,⼀⾏⼀观测):不把可变的观测值作为列

  1. 每个变量形成一列:每个变量都应该在数据集中形成单独的列。例如,一列表示年龄,一列表示性别,一列表示收入等。

  2. 每个观察结果形成一行:每个观察结果都应该作为一行记录在数据集中。例如,数据集的每一行代表一个个体或一个观察单位。

  3. 每个值只能属于一个单元格:每个值都应该放在相应变量的单元格中。避免将多个值放在同一个单元格中。

  4. 表示一个类型的多个变量放在一起:如果多个变量都属于同一类型,可以将它们合并成一个变量,并创建一个额外的列来标识它们。

  5. 变量名称应该是描述性的:变量名称应该清晰简洁,能够准确描述其含义。

  6. 数据集应该只包含一个观察单位:数据集中的每一行记录应该代表一个唯一的观察单位。避免混合不同层次或类型的观察单位。

遵循这些整洁数据规则可以使数据更易于理解、处理和分析。可以使用R中的一些包和函数,如tidyverse包中的函数(例如tidyr::gather()tidyr::spread()dplyr::mutate()等)来帮助整理和转换数据,使其符合整洁数据规则。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值