如何在R中取绝对值--向量、矩阵和数据框

3,545 阅读6分钟

The postHow to Take Absolute Value in R - vector, matrix, & data frameappeared first onErik Marsja.

在这个数据科学教程中,你将学习如何在R中获取绝对值。具体来说,你将学习如何使用内置函数abs()获取绝对值。正如你可能已经怀疑的那样,使用abs() 是非常容易的,要从例如一个向量中获取绝对值,你可以输入abs(YourVector) 。此外,你将学习如何获取矩阵和数据框的绝对值。 在下一节中,你将对本R教程中所涉及的内容有一个简单的概述。

概要

本帖的结构如下。首先,我们将得到几个简单问题的答案。注意,大多数问题实际上可能足以让你了解如何使用R统计编程环境获得绝对值。在这之后,你将了解到你需要知道什么,并在你的R环境中安装了什么,以跟随这个帖子。第三,我们将首先进入一个更详细的例子,说明如何在R中取一个向量的绝对值。这一部分之后是如何使用abs()函数,还是在一个包含负值的矩阵上。最后,我们还将看看如何在R中获取数据框中的绝对值。这一节也将使用dplyr(Tidyverse)包的一些函数。

什么是R语言中的绝对值?

R中的绝对值是指x的非负值。说白了,R中的绝对值与其他编程语言中的绝对值没有区别,因为这与数学有关,而不是编程语言。在下一个常见问题中,你将学习如何使用abs() 函数来获得一个例如矢量的绝对值。

如何在R中把负数改为正数?

要在R语言中把负数变成正数,我们可以使用abs() 函数。例如,如果我们有一个包含负数的向量x ,我们可以通过在R中输入abs(x) ,将其改为正数。

{ "@context":"schema.org", "@type":"FAQPage", "mainEntity":[{ "@类型":"问题", "名称":"什么是R中的绝对值?", "acceptedAnswer":{ "@type":"答案", "文本":"R中的绝对值是指x的非负值。说白了,R中的绝对值与其他编程语言中的绝对值没有区别,因为这与数学有关,而不是编程语言。在下一个FAQ中,你将学习如何使用abs()函数来获得一个例如矢量的绝对值。" } } , { "@type":"问题", "名称":"你如何在R中把负数变成正数?", "acceptedAnswer":{ "@type":"答案", "文本":"要在R中把负数改为正数,我们可以使用abs()/code>函数。例如,如果我们有一个包含负数的向量x,我们可以通过在R中输入abs(x)将其改为正数。" } } ] }

现在我们对如何通过取绝对值将负数变为正数有了一些基本的了解,我们可以继续看看我们在这个教程中需要做什么。也就是说,在下一节中,你将了解到本帖的要求。

所需软件/软件包

首先,如果你已经安装了R,你也会安装函数abs()。然而,如果你想使用dplyr包的某些功能(如后面的例子),你还需要安装dplyr(或Tidyverse)。 此外,如果你想在R中用readxl包读取一个.xlsx文件,你也需要安装它。这里可能值得指出的是,dplyr包含很多伟大的功能。例如,你可以用dplyr来删除R中的列,也可以通过名称或索引等来选择列

要安装dplyr,你可以使用install.packages() 功能。例如,要安装dplyr和readxl这两个软件包,可以输入install.packages(c("dplyr", "readxl")) 。注意,如果你想安装所有这些软件包,你可以把 "dplyr "和 "readxl "改为 "tidyverse",因为它们都是Tidyverse软件包的一部分。在下一节中,你将得到第一个例子,即如何使用abs() 函数在R中取绝对值。

R中的绝对值。来自矢量的例子1

下面是如何在R中从一个向量中获取绝对值。

# Creating a vector with negative values negVec <- seq(-0.1, -1.1, by=-.1) # R absolute value from vector abs(negVec)

Code language: R (r)

在上面的代码块中,我们首先用seq()方法在R中创建了一个数字序列。你可能明白,我们生成的所有数字都是负数。因此,在第二行中,我们使用abs() 函数来获取向量的绝对值。下面是输出结果,其中所有的负数现在都是正数。

taking the absolute value of a vector

在向量上使用abs()函数

在下一个例子中,我们将创建一个充满负数的矩阵,并从该矩阵中获取绝对值。

matrix containing negative numbers

R中的绝对值。矩阵中的例子2

另一方面,如果我们有一个矩阵,这里是如何在R中获取绝对值的。

negMat <- matrix( c(-2, -4, 3, 1, -5, 7, -3, -1.1, -5, -3, -1, -12, -1, -2.2, 1, -3.0), nrow=4, ncol=4) # Take absolute value in R abs(negMat)

Code language: R (r)

在上面的例子中,我们使用matrix() 函数创建了一个小矩阵,然后,使用abs() 函数将该矩阵中的所有负数转换为正数(即,获取矩阵的绝对值)。这个例子后面还有几个例子,我们将在数据框架中取绝对值。

r absolute value of matrix

现在你已经把负数改成了正数,你可能想用R函数快速得到Tukey的五个数字的汇总统计数字 fivenum()

如何在R中取绝对值。使用数据框的X个例子

在本节中,我们将学习如何在R的数据框架中获取绝对值。首先,我们将选择一列,并将其改为绝对值。其次,我们将选择多列,并再次对这些列使用abs() 函数。注意,这里我们将使用dplyr中的mutate() 函数。在最后一个例子中,我们还将使用select_if() 函数。如果我们希望能够对数据框架中的所有数字列等使用abs() ,那么这个dplyr函数就非常好。

然而,首先,我们将使用readxl包和read_excel() 函数导入示例数据集 "r_absolute_value.xlsx"。

library(readxl) dataf <- read_excel('./SimData/r_absolute_value.xlsx') head(dataf)

Code language: JavaScript (javascript)

dataframe with negative values in columns

数据框架的前6行

当涉及到在R中读取.xlsx文件时,我们不做详细介绍。不过,你可以在上面的链接中下载示例数据集。如果你把这个.xlsx文件存放在你的r-script的一个子文件夹里(见上面的代码),你可以直接复制粘贴上面的代码块。但是,如果你把它存放在你电脑的其他地方,你应该改变文件的位置路径。在下一个例子中,我们将从数据框架中的一列获得绝对值。

从数据框架中的某一列获取绝对值

下面是如何从R中的一列获取绝对值并创建一个新的列。

dataf$D.abs <- abs(dataf$D) head(dataf)

Code language: R (r)

absolute values in R dataframe column

请注意,在上面的例子中,我们使用操作符选择了一列,然后我们使用abs()函数来获取这一列的绝对值。这一列的绝对值也被添加到一个新的列中,我们再次使用-操作符选择了一列,然后我们使用`abs()` 函数来获取这一列的绝对值。这一列的绝对值也被添加到一个新的列中,我们再次使用-operator创建了这个列。当然,也可以用dplyr和mutate() 函数来代替。下面是另一种方法,我们用它来为R数据框架添加新的列,以及根据R中其他列的值添加列

dataf <- dataf %>% mutate(D.abs <- abs(D))

Code language: R (r)

现在,学习上述方法是相当整洁的,因为与只使用$-operator相比,使用mutate() ,要简单一些。例如,我们也可以利用%>%-操作符(如上面的例子)。此外,在创建一个以上的新列时,它将使代码看起来更干净(如下一个例子)。在下一个例子中,我们将通过获取另外两个列的绝对值来创建两个新列。

从R的数据框架中的多列取绝对值

下面是我们如何从两列中获取绝对值。

library(dplyr) dataf <- dataf %>% mutate(F.abs = abs(F), C.abs = abs(C))

Code language: HTML, XML (xml)

Dataframe with added columns using dplyr mutate

同样,我们使用mutate() 函数并创建了两个新的变量。这里可能值得一提的是,如果我们只想从数据框架中的数字列中获得绝对值而不创建新的变量,我们可以使用select() 函数来选择特定的列。这里有一个例子,我们选择了两列并获取它们的绝对值。

dataf <- dataf %>% select(c(F, C)) %>% abs()

Code language: R (r)

在下一节中,我们将使用这个新学的方法来获取数据框架中所有数字列的绝对值。然而,在这个例子中,我们将使用select_if() 函数,只选择数字列。知道这一点很好,因为如果我们试图在整个数据框架上运行abs() ,我们会得到一个错误。具体来说,这将返回错误 "Math.data.frame(dataf)中的错误:数据框架中的非数字变量。M".

在下一节中,我们将再次使用select_if() 函数以及 %>% 操作符。 R中另一个很棒的运算符是%in%运算符。请确保你查看这篇文章以了解更多。

在R中从数据框架的所有数字列中获取绝对值

下面是对数据框中的所有数字列应用abs() 函数。

dataf.abs <- dataf %>% select_if(is.numeric) %>% abs()

Code language: R (r)

请注意,我们是如何再次使用%>%操作符(magittr,但与dplyr一起导入)来对数据框架应用select_if() 。我们再次使用%>%操作符,在所有的数字列上应用abs() 函数。请注意,新的数据框架包含数字列(和绝对值)。

R absolute value from all columns containing numerical values

现在,在结束这篇文章之前,可能值得再次指出的是,tidyverse包是一个非常方便的包。也就是说,它附带了一系列不同的包,可以用来操作和清理你的数据。例如,你可以使用dplyr来重命名R中的因子水平,使用lubridate包从R中的日期中提取年份,使用ggplot2来创建散点图

总结

在本教程中,你已经了解了绝对值,如何在R中从1)向量、2)矩阵和3)数据框架中的列中获取绝对值。具体来说,你已经学会了如何使用abs()函数将向量、矩阵和数据框中的负值转换成正值。当涉及到数据框架时,你已经学会了如何使用r-base以及dplyr来选择列和转换它们。我真的希望你能学到一些东西。如果你做到了,请在下面留下评论。如果你对这篇博文有什么建议或更正,也请你留言。保持安全!

absolute value in R

The postHow to Take Absolute Value in R - vector, matrix, & data frameappeared first onErik Marsja.