R 中的范围 (Range) 函数


2022年4月5日, Learn eTutorial
3902

在本教程中,您将学习如何在 R 中使用 range 函数。在 R 编程语言中,range 函数用于多种需要使用统计和图形函数进行数据分析的实际应用中。您还将学习如何在向量或数据框上对包含 NA 值和 Inf 值的数据使用 range 函数。

什么是 R 中的 Range?

从统计学上讲,数据集的范围 (range) 定义为最大值和最小值之间的差,即 (最大值 - 最小值)。

在 R 编程中,range() 函数定义为 R 中向量或数据框列内最大(maximum)和最小(minimum)数据值之间的区间。

虽然定义看起来相同,但 R 编程中的 range 函数的不同之处在于它只返回两个极值,而不是差值。因此,R 中的 range() 适用于以下情况:

  • 查找给定向量的最小值和最大值
  • 查找数据框中列的最小值和最大值

如何在 R 中声明一个 range?

R 源代码中的 range() 函数通过以下语法声明。

R 中 range 函数的语法


range(x,na.rm = FALSE)

其中

  • x 可以是字符型或数值型向量。
  • na.rm: 是一个可选参数,用于控制在确定范围之前是否消除 NA 值。

让我们从一些简单的实际示例开始,以便更好地理解。首先,创建一个包含一组值的数值数据类型的向量 x。


#Created a vector of numeric data type using c()
x = c(24,5,6,7,7,-1,0)
cat("The numeric vector x is :",x,"\n")

执行后的 R 代码返回一个向量 x,如下所示


The numeric vector x is : 24 5 6 7 7 -1 0

现在,通过在向量 x 上应用 range() 函数,您可以从向量 x 中找到最大值 (24) 和最小值 (-1)。


range(x)

最小值和最大值在 x 中返回。


[1] -1 24

使用带 NA 的 range() 示例

NA 是一个保留字,表示值不可用或缺失,即“不可用 (Not Available, NA)”。我们需要通过向 range() 添加一个参数 na.rm 来更改语法,其值可以是 TRUE 或 FALSE。如果输入向量或数据结构中存在 NA,range 函数将无法返回结果。因此,将 na.rm 赋值为 TRUE 将在查找 range() 时移除输入中存在的 NA,并提供准确的结果。

考虑相同的向量 x,其中在一组给定值中包含 NA,以及 Inf,这是 R 中表示无穷大的另一个保留字。


x = c(24,5,Inf,6,7,7,-1,0,NA)

应用 range(x) 我们得到


[1] NA NA

从输出中可以清楚地看到,带有 NA 的输入没有被 range() 评估。这里我们使用修改后的语法来移除 NA。


range(x,na.rm=TRUE)

在 range() 内部添加 na.rm=TRUE 后的输出返回了最小值(-1)和最大值(Inf),这排除了向量值中的 NA。


[1]  -1 Inf

使用数据框的 range() 示例

让我们首先创建一个包含几个不同类别项目的数据框,并找出价格最低和最高的项目。


items = data.frame(ITEMS = c("Fruit","Fruit","Fruit","Fruit","Fruit","Vegetable","Vegetable","Vegetable","Vegetable","Dairy","Dairy","Dairy","Dairy","Dairy"), 
                   ITEM_NAME = c("Apple","Banana","Orange","Mango","Papaya","Carrot","Potato","Brinjal","Raddish","Milk","Curd","Cheese","Milk","Paneer"),
                   PRICE = c(100.981,80.643,80.223,90.3,65.3,71.9,62.2,71.3,25.1,62.9,41.9,35.7,50.9,121.7))

items

输出的 items 数据框是


ITEMS ITEM_NAME   PRICE
1      Fruit     Apple 100.981
2      Fruit    Banana  80.643
3      Fruit    Orange  80.223
4      Fruit     Mango  90.300
5      Fruit    Papaya  65.300
6  Vegetable    Carrot  71.900
7  Vegetable    Potato  62.200
8  Vegetable   Brinjal  71.300
9  Vegetable   Raddish  25.100
10     Dairy      Milk  62.900
11     Dairy      Curd  41.900
12     Dairy    Cheese  35.700
13     Dairy      Milk  50.900
14     Dairy    Paneer 121.700

通过对数据框 items 应用 range 函数,我们得到最大值和最小值。


range(items$PRICE)
[1]  25.1 121.7

在 R 中查找最大值和最小值

R 编程语言中的范围也可以使用 min() 和 max() 函数来确定。min() 函数在输入向量或数据类型中找到最小的数据值。max() 函数从给定的输入中找到最大的数据值。

R 中 min() 和 max() 的语法


min(<vector>,na.rm=TRUE)       #To find minimum
max(<vector>,na.rm=TRUE)       #To find maximum

一个在 R 中使用 min() 和 max() 的简单程序,其中 na.rm 用于排除存在的 NA。使用 c() 创建了一个数值数据类型的向量 x,并为 max() 函数返回 Inf,为 min() 函数返回 -1。


x = c(24,5,Inf,6,7,7,-1,0,NA)
> print(max(x,na.rm=TRUE))
[1] Inf
> print(min(x, na.rm=TRUE))
[1] -1

在 R 中使用 min() 和 max() 函数查找范围

观测值的范围可以通过计算最高值和最低值之间的差来得到。同样的理论也适用于从给定输入中查找向量或数据框的范围。

使用 max() 和 min() 查找范围的语法


Range = max(<vector>,na.rm=TRUE)- min(<vector>,na.rm=TRUE)

使用 min() 和 max() 查找范围的程序


#Created a vector of numeric data type using c()
 x = c(24,5,4,6,7,7,-1,0,NA)
 print(x)

# find range
 print(max(x, na.rm=TRUE)-min(x, na.rm=TRUE))

R 源代码的输出是


[1] 24  5  4  6  7  7 -1  0 NA
[1] 25

如何查找数据框列的范围?

数据框列的范围也可以使用最大值(max)和最小值(min)函数来确定,就像我们对向量所做的那样。数据框中任何特定列的最高值可以使用 max() 函数获得。数据框中列的最低值可以使用 min() 函数获得。在这两种情况下,都可以使用 na.rm=TRUE 排除 NA 值。

语法


max(dataframe$column_name,na.rm=TRUE)-min(dataframe$column_name,na.rm=TRUE)

查找数据框中范围的程序。


# create dataframe
x = data.frame(first=c(98, 5, 67, 67, 23, 45, 78, NA, 89),                sec 41, 96, 34, 27, 23, NA, 73,NA))

# display
print(x)

上面的 R 代码使用名为“first”和“second”的两列创建了一个数据框。让我们找出这两列的范围。


# find range in column1
print(max(x$first, na.rm=TRUE)-min(x$first, na.rm=TRUE))

# find range in column2
print(max(x$second, na.rm=TRUE)-min(x$second, na.rm=TRUE))

上述代码的执行结果显示


[1] 93
[1] 73

如何查找整个数据框的范围?

整个数据框的范围是通过计算存在的最大值和最小值之间的差来获得的,这又是由 max() 和 min() 函数确定的。

语法


max(dataframe,na.rm=TRUE)-min(dataframe,na.rm=TRUE)

查找数据框中整个范围的程序


# create dataframe
x = data.frame(first=c(98, 5, 67, 67, 23, 45, 78, NA, 89),                sec 41, 96, 34, 27, 23, NA, 73,NA))

# display
print(x)

# find range in entire dataframe
print(max(x, na.rm=TRUE)-min(x, na.rm=TRUE))

输出


[1] 93