R语言which()函数全面解析:高效数据筛选与位置索引技巧

R中的which()函数返回满足给定条件的值的位置或索引。R中的Which()函数给出了逻辑向量中该值的位置。位置可以是行、列,甚至可以是向量。

R中which()函数的语法

which():R中的which函数返回逻辑向量中值的位置。

which(x,arr.ind = F,useNames = F)

参数说明:

  • x = 输入的逻辑向量。
  • arr.ind = 如果x是数组,则返回数组索引。
  • useNames = 表示数组的维度名称。

which()函数的简单示例

好的,你得到了which函数的定义以及它的工作性质。现在,让我们把学到的东西实际应用起来。

我们看看它是如何工作的。

which(letters=="p")

16

which(letters=="n")

14

which(letters=="l")

12

“letters” 是一个内置常量,包含了英语字母表的26个字母,按顺序进行排列。

你在上面看到的输出表示了数据框中每个字母在字母表中的位置。正如你所见,字母”p”在字母表中排第16位,而”l”和”n”分别排在第12位和第14位。

现在让我们学习如何使用which函数。

使用which()函数与向量进行操作

现在,让我们使用R语言创建一个向量,然后通过使用which函数进行位置跟踪。

#创建一个向量
df<-c(5,4,3,2,1)
#5的位置
which(df==5)

1

#1的位置
which(df==1)

5

#大于2的值的位置
which(df>2)

1 2 3

太好了!在R中的which()函数返回给定输入值的位置。你还可以使用这个函数来传递特定的条件,并得到与条件匹配的输出位置,就像我们在上一个例子中看到的那样。

在数据框中使用which()函数

现在,让我们看看如何在R语言中将which函数应用于数据框。

df<-datasets::BOD
df
    Time  demand
1    1    8.3
2    2   10.3
3    3   19.0
4    4   16.0
5    5   15.6
6    7   19.8

为此,我们使用了BOD数据集,该数据集包含两列,即时间和需求。这是另一个内置数据集。

让我们使用 which 函数,并尝试找出数据中值的位置。

which(df$demand=='10.3')
2

您还可以将一系列数值输入which()函数中。看下面的示例,我正在尝试从数据框中找到两个数值的位置。

which(df$demand==c(8.3,16.0))
1    4

使用which()函数查找数据框中具有数值的列

甚至可以使用which()函数在包含数值数据的数据中查找列名。

让我们看看在R语言中如何运作。为此,我们使用了”鸢尾花”数据集。

df<-datasets::iris
df
   Sepal.Length  Sepal.Width   Petal.Length   Petal.Width  Species
1            5.1         3.5          1.4         0.2     setosa
2            4.9         3.0          1.4         0.2     setosa
3            4.7         3.2          1.3         0.2     setosa
4            4.6         3.1          1.5         0.2     setosa
5            5.0         3.6          1.4         0.2     setosa
6            5.4         3.9          1.7         0.4     setosa
7            4.6         3.4          1.4         0.3     setosa
8            5.0         3.4          1.5         0.2     setosa
9            4.4         2.9          1.4         0.2     setosa
10           4.9         3.1          1.5         0.1     setosa
11           5.4         3.7          1.5         0.2     setosa
test<-which(sapply(df,is.numeric))
colnames(df)[test]
"Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width" 

输出显示,虹膜数据集中有5个列。其中,4个是数值列,1个是分类列(物种)。

我们在R中使用了sapply函数和which()方法。

如果您是数据分析师,那么which()函数将会对您非常有价值,它根据输入条件仅返回数字列的名称。

在矩阵中使用which()函数

最后,我们已经到达了R中的矩阵。在R语言中,可以使用which()函数来获取矩阵中值的位置。在本章节中,您还将了解到arr.ind参数的用法。

首先要做的事情就是建立一个矩阵。

df<-matrix(rep(c(1,0,1),4),nrow = 4)
df
       [,1] [,2] [,3]
[1,]    1    0    1
[2,]    0    1    1
[3,]    1    1    0
[4,]    1    0    1

现在,让我们使用which()函数来获取矩阵中值为’0’的位置。

which(df==0,arr.ind = T)
      row col
[1,]   2   1
[2,]   1   2
[3,]   4   2
[4,]   3   3

好的,which函数已经返回了矩阵中值为’0’的位置。

“0”的第一次出现是在第二行第一列。然后下一次出现在第一行第二列。接着,是在第四行第二列。最后,是在第三行第三列。

结论

在数据分析和挖掘中,R语言中的which()函数是最常用的函数之一。

这个函数给出了数据中数值的位置。如果你正在处理大量的数据,那么在其中找到特定数值的位置将变得困难,这就是 R 中的 which() 函数发挥作用的地方。

现在就这样吧。祝您定位愉快!

更多阅读:R文档

bannerAds