R编程中的which()函数

时间:2020-02-23 14:43:58  来源:igfitidea点击:

R中的which()函数返回满足给定条件的值的位置或者索引。
R中的which()函数为您提供值在逻辑向量中的位置。
该位置可以是行,列甚至向量之类的任何东西。

R中which()函数的语法

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

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

其中:

  • X =输入逻辑向量。

  • Arr.ind =如果x是数组,则返回数组索引。

  • useNames =表示数组的维名称。

which()函数的简单示例

好了,您对哪个功能及其工作性质有了定义。
现在,让我们实际应用我们学到的东西。

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

which(letters=="p")

16

which(letters=="n")

14

which(letters=="l")

12

"字母"是一个内置常数,英文字母的所有26个字母顺序排列。

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

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

与向量一起使用which()函数

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

#creating a vector 
df<- c(5,4,3,2,1)

#Postion of 5
which(df==5)

1个

#Position of 1
which(df==1)

5

#Position of values greater than 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数据集包括2列,即时间和需求。
这是另一个内置数据集。

让我们使用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中具有Matrix的哪个函数

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

第一件事–创建矩阵

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

好了,哪个函数返回了矩阵中值" 0"的位置。

第一次出现的" 0"在第二行的第一列中。
然后,下一个出现在第一行第二列。
然后,我们有第四行,第二列。
最后,第三行,第三列。