R中"子集"上的逻辑参数究竟起什么作用



我正在学习R一书-Richard Cotton,第5章:列表和数据帧,我不理解这个例子,我有这个数据帧和以下脚本:

(a_data_frame <- data.frame(
x = letters[1:5],
y = rnorm(5),
z = runif(5) > 0.5
))
x          y     z
1 a  0.6395739 FALSE
2 b -1.1645383 FALSE
3 c -1.3616093 FALSE
4 d  0.5658254 FALSE
5 e  0.4345538 FALSE
subset(a_data_frame, y > 0 | z, x) # what exactly mean y > 0 | z ?

我读了这本书,说:

子集最多需要三个参数:一个数据帧到子集,一个要包含的行的条件的逻辑向量,和保留的列名

没有关于第二个逻辑参数的更多信息。

这是一个棘手的例子,因为第二个参数(a_data_frame, y > 0 | z, x)的意思是y>0和"|z";表示或z列中为True的值

y>0评估rnorm(5(给出的值,因为你的值与书不同;或""符号表示在条件为True的情况下选择了列z,在您的情况下,所有值都为False,您看不到发生了什么,但作为一个教学示例,如果我们更改z = rnorm(5)而不是runif(5)>5,您可以更好地了解此函数的工作方式。

(a_data_frame <- data.frame(
x = letters[1:5],
y = rnorm(5),
z = rnorm(5)
))
x           y           z
1 a -0.91016367  2.04917552
2 b  0.01591093  0.03070526
3 c  0.19146220 -0.42056236
4 d  1.07171934  1.31511485
5 e  1.14760483 -0.09855757

所以如果我们有y<0或z<0列的输出将是行a、c、e

> subset(a_data_frame, y < 0 | z < 0, x)
x
1 a
3 c
5 e
> subset(a_data_frame, y < 0 & z<0, x)
[1] x 
<0 rows> (or 0-length row.names) # there is no values for y<0 and z<0
> subset(a_data_frame, y < 0 & z, x) # True for row 2.
x
2 b
> subset(a_data_frame, y < 0 | z, x) # true for row 2 and row 4.
x
2 b
4 d

最新更新