使用dplyr计算一列中的出现次数

2,458 阅读6分钟

The postR Count the Number of Occurrences in a Column using dplyrappeared first onErik Marsja.

在这个R教程中,你将学习如何计算一个列中的出现次数。有时,在开始分析你的数据之前,知道一个给定的值在你的变量中出现多少次可能是有用的。例如,当你有一组有限的可能值需要比较时,在这种情况下,你可能想在进行分析之前知道每个可能值有多少。另一个例子是,你想计算一列中重复值的数量。此外,如果我们想获得一个概述或信息,让我们说:你的数据集里有多少男人和女人。在心理学上。在这个例子中,你有义务报告你的研究文章中的男性和女性的数量。

概要

在这篇文章中,你将学习如何使用R函数table()来计算一列中出现的次数。此外,我们还将使用软件包dplyr中的函数count()。首先,我们先安装dplyr,然后从CSV文件中导入示例数据。其次,我们将开始研究table()函数,以及我们如何使用它来计算不同的出现次数。在这里,我们还将看一下如何计算因子水平的相对频率。

第三,我们将看看dplyr的count()函数,以及如何在R中计算一个值在一列中出现的次数。最后,我们还将看看如何计算一列中因素/字符/值的比例。

在下一节中,你将学习如何安装dplyr。当然,如果你喜欢使用table(),你可以直接跳到本节。

安装dplyr

正如你可能已经知道的那样,安装R包是非常容易的。下面是你如何使用install.packages()函数来安装dplyr。

install.packages("dplyr")

Code language: R (r)

注意,dplyr是Tidyverse包的一部分,可以安装。安装Tidyverse包将安装一些非常方便和有用的R包。例如,我们可以使用 dplyr来删除列,并在R中删除重复的数据。此外,我们可以使用tibble来在R中向数据框架添加列。最后,包Haven可以用来在R中读取SPSS文件,并在R中将矩阵转换为数据框架。 更多的例子,以及R教程,见文章末尾。

导入示例数据

在学习如何使用R计算一列中出现的次数之前,我们需要一些数据。在本教程中,我们将从网上找到的一个CSV文件中读取数据。

df <- read.csv('https://vincentarelbundock.github.io/Rdatasets/csv/carData/Arrests.csv')

Code language: R (r)

这个数据包含了一个被逮捕的人的详细信息,在本教程中,我们要看一下性别和年龄列。首先,性别栏将一个人的性别划分为男性或女性。其次,年龄当然是指数据集中的个人年龄。让我们快速浏览一下这个数据集。

structure of example data

示例数据的结构

现在,使用str()函数,我们可以看到我们有5226个观察值,横跨9个列。此外,我们可以看到这9列的数据类型。

如何使用table()计算R中的出现次数

下面是如何使用R函数table()来计算一列中的出现次数。

table(df['sex'])

Code language: R (r)

正如你所看到的,我们用括号选择了 "性别 "列(即df['sex']),并使用了是table()函数的唯一参数。这就是结果。

r count number of occurrences in column

计算一列中的数值

请注意,在R中也可以使用$来选择单列。现在,正如你在上图中所看到的,该函数以降序方式返回给定列(在我们的例子中为'sex')中所有唯一值的计数,没有任何空值。通过扫视上述输出结果,可以看到数据集中的男性多于女性。事实上,结果告诉我们,绝大多数是男性。

r count number of occurrences in column

使用$运算符选择一个列。

请注意,上面的两个例子都会删除缺失值。然而,在某些情况下,我们可能也想知道某一列中有多少缺失值。因此,在下一节中,我们将看到一个参数,我们可以用它(即useNA)来计算一列中的唯一值和缺失值。然而,首先,我们要为性别列增加10个缺失值。

df_nan <- df df_nan$sex[c(12, 24, 41, 44, 54, 66, 77, 79, 91, 101)] <- NaN

Code language: R (r)

在上面的代码中,我们首先使用了列名(用$运算符),然后,用括号来选择行。最后,我们使用NaN函数将缺失值添加到我们选择的这些行中。在下一节中,我们将计算包括刚才添加到数据框中的10个缺失值的出现次数。

如何计算出现次数以及缺失值的数量

这里有一个代码片段,你可以用它来获得一列中唯一值的数量,以及缺失值的数量。

df_nan <- df df_nan$sex[c(12, 24, 41, 44, 54, 66, 77, 79, 91, 101)] <- NaN table(df_nan$sex, useNA = "ifany")

Code language: PHP (php)

现在,正如你在上面的代码块中看到的,我们使用了useNA参数。这里我们添加了字符对象 "ifany",如果有缺失的值,它也会计算出来。下面是输出结果。

r count number of occurrences in column

现在,我们已经知道在这一列中有10个缺失值。当然,当我们处理收集的数据时,我们可能不知道这一点,而且,这将让我们知道在一个特定的列中有多少缺失值。 在下一节中,我们将不计算一个值在R中的列中出现的次数,接下来我们将计算一个列中唯一值的相对频率。

计算唯一值的相对频率

现在,当我们知道如何计算R的数据框架中某一列的唯一值时,我们可以做的另一件事就是计算唯一值的相对频率。下面是我们如何计算数据集中男性和女性的相对频率。

table(df$sex)/length(df$sex)

Code language: PHP (php)

在上面的代码块中,我们使用了第一个例子中的table()函数。 我们添加了一些东西来获得因素(即男性和女性)的相对频率。在上面的例子中,我们使用length()函数来获得观察值的总数。我们用它来计算相对频率。如果我们不仅想计算出现的次数,而且想知道例如男性和女性在样本中的百分比,这可能很有用。

如何在R语言中用dplyr计算一个值在某一列出现的次数?

以下是我们如何使用R语言的dplyr包来计算一个列中出现的次数。

library(dplyr) df %>% count(sex)

Code language: R (r)

r count number of occurrences in column using dplyr

计算一个值在一列中出现的次数 R使用dplyr

在上面的例子中,我们使用了%>%操作符,使我们能够使用count()函数来获得这个漂亮的输出。现在,正如你所看到的,当我们使用dplyr计算一个值在R中的某一列中出现的次数时,我们得到的输出与使用table()时不同。关于另一个伟大的运算符,请参阅关于如何在R中使用%in%运算符的帖子。

在下一节,我们将计算因子水平的相对频率。我们将再次使用dplyr,但这次我们将使用group_by(),summaryise(),和mutate()。

使用dplyr计算因子水平的相对频率

在这个例子中,我们将使用三个R函数(即来自dplyr包)。首先,我们再次使用管道运算符,然后我们按列对数据进行分组。在我们对数据进行分组后,我们计算在我们所选择的列中的唯一出现次数。最后,我们要计算因素水平的频率。

df %>% group_by(sex) %>% summarise(n = n()) %>% mutate(Freq = n/sum(n))

Code language: R (r)

使用上面的代码,我们得到两列。在上面的代码块中,我们所做的是通过包含性别信息的列对数据进行分组。然后我们对数据进行总结。使用n()函数,我们得到了每个值的观察数。最后,我们计算了一个新的变量,叫做 "Freq"。这里是我们计算频率的地方。这给了我们另一个很好的输出。让我们看一下输出。

正如你所看到的,在上面的输出中,我们得到两列。这是因为我们在汇总的数据中增加了一个新的列:频率。当然,像我们在前面的例子中那样计算一列,如年龄,并不能提供任何有用的信息。在下一节,我们将看看如何使用R包dplyr来计算一列中的唯一出现次数。

年龄数据有53个唯一值,平均值为23.84,标准差为8.31。因此,计算年龄列的唯一值会产生很多头痛的问题。在下一个例子中,我们将看看如何计算年龄,但通过分档得到一个可读的输出。如果我们想计算更多的连续数据,这是很有用的。

如何在计算不同的值时创建Bins

如前所述,我们可以创建仓并计算每个仓中的出现次数。下面是一个示例代码,我们在其中得到了5个仓。

df %>% group_by(group = cut(age, breaks = seq(0, max(age), 11))) %>% summarise(n = n())

Code language: R (r)

在上面的代码块中,我们再次使用了group_by()函数(当然,是在%>%操作符之后)。在这个函数中,我们还创建了组(即,bin)。这里我们使用了seq()函数,该函数可以用来在R中生成一个数字序列。最后,我们使用了summaryise()函数来获得列中出现的次数,并进行了分类。下面是输出结果。

r count number of occurrences in column binned

对于每个bin,年龄值的范围是一样的:11岁。其中一个包含从11到22岁的年龄。然而,我们也看到,每个年龄段的人数是不同的。这使我们能够看到,大多数被逮捕的人都在22岁以下。在这种情况下,这是有道理的,对吗?

结论

在这篇文章中,你已经学会了如何使用R来计算一列中出现的次数。具体来说,你已经学会了如何使用table()函数和dplyr的count()函数来计算出现的次数。此外,你还学会了如何计算一列中因子水平的相对频率。此外,你还学会了如何计算不同分层中的出现次数,以及如何计算不同分层中的出现次数。

R教程

这里有一堆其他的教程,你可能会觉得有用。

The postR Count the Number of Occurrences in a Column using dplyrappeared first onErik Marsja.