组合符号[,]和$的含义

时间:2018-10-21 18:00:56

标签: r

我了解到[ , ]表示法从数据帧中以[行号,列号]的形式提取值。我也知道$表示法将一列中的所有值作为向量返回,但是我不确定这两种表示法是如何组合在一起的。

编辑:

其他上下文/示例:mydat[mydat$obsnum == 1,]

3 个答案:

答案 0 :(得分:2)

假设mydat是具有n行的数据帧。然后mydat$obsnum == 1创建一个长度为n的逻辑向量,如果TRUE的对应元素为1,则每个元素为mydat$obsnum,否则为FALSE

mydat[1, ]这样的子集为您提供mydat的第一行。但是您也可以使用逻辑向量进行子集化。您将获得逻辑向量为TRUE的所有行。

因此,mydat[mydat$obsnum == 1, ]为您提供mydat的所有行,其中mydat$obsnum等于1。

答案 1 :(得分:2)

的含义
mydat[mydat$obsnum == 1,]
如果将表达式分解为以下等效的3行,则

很简单:

X <- mydat$obsnum
Y <- X == 1
mydat[Y,]

所以,正如您正确指出的那样:

X <- mydat$obsnum

返回一个整数向量(我假设观察次数)

然后:

Y <- X == 1

返回一个长度为c(TRUE,FALSE,TRUE...)且长度为X逻辑矢量,例如TRUE,其中X等于1且{{ 1}}。

最后:

FALSE

选择mydat[Y,] mydat的{​​{1}}行,并排除YTRUE的行。

实际上,Y子集运算符FALSE接受包含行/列索引的整数向量,或者指示必须提取哪些行/列的逻辑向量,甚至接受指示行/列的字符向量。要选择的名称。

答案 2 :(得分:1)

在您的情况下,idx <- mydat$obsnum == 1生成逻辑向量idx。现在,如果为idx[1] == TRUE,则意味着谓词用于生成对第一个元素求值为TRUE的向量。对于例如idx[3] == FALSE,只是谓词没有被满足。

然后,您的逻辑向量可用于索引数据帧。因此,您实际上正在做的是:mydat[c(TRUE, TRUE, FALSE, TRUE, FALSE), ],只是您从未手工编写过索引向量。

正如您正确观察到的那样,[]标记也可以用于选择数据框中的列。例如,您可能只想选择第一列:mydat[c(TRUE, TRUE, FALSE, TRUE, FALSE), 1]

现在,很棒的是布尔索引也适用于列!您能猜出mydat[c(TRUE, TRUE, FALSE, TRUE, FALSE), c(TRUE, FALSE)]做什么吗?究竟!它返回第一列,但不返回第二列!也就是说,如果数据帧精确地具有两列,则向量将与匹配length(colnames(df))一起循环使用。

回到介绍性示例mydat[mydat$obsnum == 1,],这将选择谓词所在的所有行以及所有列。如果执行了mydat[mydat$obsnum == 1, mydat$obsnum == 1],则所有发生的事情是R生成了两个逻辑向量并将其用于索引数据帧,因此它对该谓词的语义一无所知。

编辑:除index vectors外,您还可以拥有index matrices。您还将发现此功能已进入Pandas(Python数据分析库)中。