相关文章推荐
无邪的丝瓜  ·  Asynchronous ...·  1 月前    · 
捣蛋的凉茶  ·  Swagger 会话示例·  1 年前    · 
安静的消炎药  ·  fullcalendar 4.2 使用 ...·  1 年前    · 
·  阅读 如何在R中移除/删除一个行 - 带有NA、条件、重复的行

The post How to Remove/Delete a Row in R - Rows with NA, Conditions, Duplicated appeared first on Erik Marsja .

在本教程中,你将学习1)如何在 R 中删除一行,以及2)如何在R中删除多行。当然,R是一种多功能的编程语言,当我们需要删除一行时,有许多不同的选择。例如,如果我们想根据一个条件来删除一行,我们可以使用 subset() 函数。如果我们喜欢使用Tidyverse软件包,我们可以使用 filter() ,根据某一列的值来删除(或选择)行(有条件地,也就是和使用subset一样)。此外,我们还可以使用dplyr中的函数 slice() ,根据索引来移除行。

在这篇文章中,我们将通过以下方式在R编程环境中删除行。

  • 根据索引删除一行
  • 使用Base R
  • 使用来自dplyr的 slice()
  • 删除多条记录
  • 根据一个条件删除一行
  • 使用 subset() 函数
  • 使用 filter() 函数
  • 删除缺失值的行
  • 删除重复的行
  • 注意,在本篇文章的大多数例子中,我们将使用数据帧(或二进制)。然而,在适当的时候,同样的方法也会用在矩阵上。也就是说,你将学习如何从矩阵和数据框架中删除一行。在下一节中,我们将介绍本教程所需要的内容。以下是本R教程的内容表。

    要学习本教程,你需要具备的条件不多。当然,如果你想使用示例数据集,你需要下载它,并确保你的R环境设置为与数据文件的位置相同的环境(或者你需要知道文件的路径)。在R中设置工作目录可以用 setwd() 函数来完成。

    此外,如果你想使用dplyr,你要么需要安装 Tidyverse ,要么只安装dplyr包。安装R包可以用 install.packages() 函数来完成。安装Tidyverse是通过这个命令完成的。

    install.packages("tidyverse")
    

    值得注意的是,在这里,Tidyverse附带了很多伟大的软件包。例如,使用dplyr你可以在R中选择一个列,tibble(和dplyr)使你能够使用R向数据中添加一个列,以及其他一些东西。也就是说,安装TIdyverse是非常值得的。

    现在,在我们继续讨论如何在R中删除一行的例子之前,我们将快速回答一些常见问题。 这些问题可能已经把你带到了这里,也可能是你所需要的一切。

    如何在R语言中删除一行?

    要在R语言中删除一行,你可以使用-操作符。例如,如果你想从R的数据框架中删除第一行,你可以使用以下代码:dataFrame <- dataFrame[-1, ]。这段代码将从数据框架中删除第一行。 当然,如果你需要删除多行,你可以使用向量函数添加它们: dataFrame <- [-c(1, 2, 3),]

    在我们要在R中从数据框中删除一行之前,我们需要一些数据来练习。这些数据存储在一个Excel文件中,你需要在读取它之前将其下载到你的电脑上(见要求部分)。下面是你如何使用readxl包在R中读取一个xlsx文件

    library(readxl)
    dataf <- read_excel("example_sheets2.xlsx")
    head(dataf)
    

    这里是这个数据框架的前6行。

    如果我们想知道更多关于数据的信息,我们也可以使用str() 函数。

    从上面的图片中可以看出,该数据有10行5列(这个信息也可以用dim() 函数得到)。此外,我们可以看到不同变量(列)的数据类型。在下一节中,我们将使用其索引在R中删除一条行。

    如何通过索引删除R语言中的一行

    下面是你如何在R基础上使用其索引删除一行。

    dataf[-2,]
    

    正如你在输出中看到的,我们得到了一个9乘5的矩阵,因此,已经成功地从数据框中删除了第二行。然而,如果我们希望它是永久性的,我们需要将数据框架分配给一个新的(或覆盖旧的)。 下面是我们如何做到这一点。

    dataf <- dataf[-2,]
    

    在下一节中,我们将从一个矩阵中删除一条行。

    如何在R中从一个矩阵中删除一行

    如前所述,我们将看到如何从矩阵中删除行,只要我们用于数据框架的相同方法适用即可。首先,这里是如何在R中创建一个矩阵

    mtx <- matrix(seq(1,9), nrow = 3, 
                  ncol = 3)
    

    在上面的代码块中,我们使用matrix() 函数创建了一个矩阵。另外,我们使用 seq在R中创建了一个数字序列。接下来,我们可以使用与前面例子相同的方法删除第一行。

    mtx[-1, ]
    

    同样,如果我们想在没有删除行的情况下使用我们的数据,我们需要将其分配给一个新的(或覆盖旧的)矩阵。注意,在R中也可以将矩阵转换为数据帧。在下一个例子中,我们将使用dplyr中的slice() 函数,按照索引删除一行。

    如何使用dplyr的slice()函数在R中分两步删除一行

    在本节中,我们准备使用其他函数在R中删除行。以下是使用slice()函数的两个简单步骤。

    1.加载dplyr

    第一步当然是加载软件包。这是用library() 函数完成的。

    library(dplyr)
    

    2.使用slice()函数

    现在我们已经准备好使用其索引删除一行。下面是我们如何使用slice() 函数来做。

    slice(dataf, 1)
    

    注意我们如何使用数据框架作为第一个参数,然后我们使用"-"号和我们想要删除的行的索引。在这个例子中,我们删除了第一行。在继续下一个例子之前,值得指出的是,slice() 函数不能用于矩阵。

    在接下来的两个例子中,我们将学习如何使用base R和slice() 函数来删除多行。

    如何使用基础R删除行

    在这个例子中,我们将通过索引删除多行。当然,这与删除单行的方法类似。但是,我们需要使用c() 函数。下面是我们如何在R中按索引删除4条记录。

    dataf[-c(1, 3, 5, 7),]
    

    在上面的代码块中,我们再次使用了括号("[]")。在括号内,我们进一步使用了c() 函数。在这个函数中,我们添加了我们想从数据框架中删除的行的索引。请注意,我们再次在c() 前面使用了"-"。如果你正在处理一个矩阵,同样可以应用完全相同的方法来从矩阵中删除行。

    mtx[-c(1, 3, 4),]
    

    同样,请记住将数据框架分配给一个新的变量,否则,如果没有删除的行,你就无法使用你的数据。

    在下一个例子中,我们将使用slice() 函数(dplyr)来从R中的数据框架中删除行。

    如何使用R语言中的Slice()函数删除行

    在前面的例子中,我们学习了使用slice() 函数来删除行的两个步骤。当然,在使用dplyr删除多条记录时,同样的两个步骤也是有效的。事实上,我们的工作方式与之前的例子很相似。也就是说,我们在slice() 函数中使用c() 函数来从数据框架/tibble中删除多条记录。

    slice(dataf, -c(1, 3, 5), ]
    

    当然,我们需要将删除的行分配到新的数据框中。在接下来的两个例子中,我们将进入在R中删除行的更高级的方法。首先,我们将学习如何使用subset() 函数根据一个条件来删除行。其次,我们将使用dplyr包中的filter() 函数做同样的事情。当然,我们也会看一下使用多个条件删除行的例子。

    如何根据条件在R中删除一行

    有时候,我们需要根据一个列的值来删除数据中的某一行。例如,我们可能知道某个参与者希望被排除在数据分析之外。另一个例子是,我们想对数据的一个子集进行分析。在任何情况下,这里是我们如何有条件地使用subset() 函数来删除一行的。

    subset(dataf, Name != "Steve")
    

    在上面的代码块中,我们使用了subset函数,将数据框架作为第一个参数。接下来是我们的条件。在这个例子中,我们要删除名字为 "Steve "的那一行。现在,这可能看起来有点落后,实际上我们正在做的是选择所有不存在 "Steve "这个名字的行。这将给我们提供这个数据框架。

    当然,在大多数情况下,我们可能想根据多个条件来删除行。不要担心,我们将对此进行研究,但首先,我们将使用dplyr中的filter() 函数来完成上述相同的结果。

    使用filter()dplyr根据列单元格中的一个值删除一个行

    下面是我们如何使用filter() 函数根据一个条件删除一行。

    filter(dataf, Name != "Pete")
    

    在上面的示例代码中,我们删除了 "姓名 "列中有 "Pete "的行。同样,我们实际做的是选择除了这一行以外的所有其他行。

    当然,我们很可能想根据多个条件来删除某一行(或几行),我们也将很快学会如何做到这一点。首先,我们学习如何使用subset() 函数来实现这一目的。其次,我们使用dplyr包中的filter() 函数。

    在R中根据条件删除行

    现在,正如前面提到的,很多时候我们可能想根据许多条件来删除某一行(或几行)。下面是一个关于如何使用subset() 函数的多个条件的示例代码。

    subset(dataf, Mean != 99 & Correct != 99)
    

    在上面的例子中,我们在subset() 函数中使用了和运算符。然而,首先,我们使用数据框架(即dataf)作为第一个参数。第二个,是我们添加条件的地方。正如你所看到的,在上面的代码块中,&是和运算符。在这里,我们选择了所有不包含指定值的行(在我们的例子中是数字X和Y)。在下一个例子中,我们将看到如何使用软件包dplyr中的filter() 函数来执行同样的任务。

    使用filter()函数根据条件删除行

    当然,基于多个条件的删除行也可以用非常类似的方式使用filter() 函数来完成。

    filter(dataf, Mean != 99 & Correct != 99)
    

    在上面的代码块中,我们基本上只是将subset() 函数改为filter() 函数。然而,在使用dplyr和Tidyverse软件包时,我们可以利用%>%操作符来实现这样的数据管道。

    dataf <- dataf %>%
             filter(Mean != 99 & Correcft != 99)
    

    在下一节中,你将学习如何删除缺失值的行。然而,首先,我们需要在当前的数据框中添加一些缺失值。

    如何在R中删除所有缺失值(NA)的行

    有时我们需要从数据中删除缺失值。在R语言中,我们可以使用na.omit() 函数删除有缺失值的行。然而,首先,我们要在我们的实践数据框架中添加一些缺失值。

    dataf_na <- dataf
    dataf_na$Correct[c(4, 7)] <- NA
    dataf_na$Mean[c(2, 3)] <- NA
    

    在上面的代码块中,我们在正确栏的第4行和第7行以及平均值栏的第2行和第3行中添加了缺失值。接下来,我们可以使用na.omit() 函数来删除这些缺失的值。下面是我们如何从我们的数据框架中删除NA。

    dataf_na <- na.omit(dataf_na)
    

    在下一节中,我们将快速了解一下如何删除重复的行。

    如何删除R中的重复行

    在这最后一个例子中,我们将在R中删除重复的行。

    dataf2 <- rbind(dataf, dataf[1,])
    dataf2[!duplicated(dataf2), ]
    

    正如你在上面的代码块中看到的,我们首先创建了两个重复的行,然后,我们使用了 duplicated() 函数。请注意我们在Doubleicated()函数之前使用了!。我们这样做是为了不让我们得到重复的行。如果忽略这一点,我们就会得到重复的行。关于从数据中删除重复行的更多信息,请参见关于在R中删除 重复行的文章。

    在这篇文章中,你已经学会了如何使用基础函数和dplyr包中的函数在R中删除一条记录。此外,你还学会了如何在R中的数据框架和矩阵上执行这项任务。具体来说,你现在已经学会了通过行的索引来删除行。此外,你还学会了如何使用行索引来删除多条记录。在这两个例子中,删除多行也是使用基础R和dplyr(slice())完成的。由于我们有时想根据一个(或两个)条件删除一行,你也已经学会了如何使用subset()和filter()函数根据一个条件删除一行。后者也是一个dplyr函数。最后,我们又经历了两个例子,首先删除了有缺失值的行,然后是有重复值的行。

    分类:
    代码人生
    标签: