“之间的区别&引用;及&引用;在r
这里是一个代码片段,我正在尝试使用“之间的区别&引用;及&引用;在r,r,negation,R,Negation,这里是一个代码片段,我正在尝试使用: demo <- <dataframe>[!which(<dataframe>$<col_name> == 0),] 它给了我正确的答案 有人能解释为什么会这样吗?它返回一个索引,可用于对数据帧(或其他任何内容)进行正/负索引。但是位置向量将仅返回FALSEs。试试!5。以下是一些例子: df <- data.frame(col1=1:6, col2=rep(0:1, 3)) > df col1 c
代码>:
demo <- <dataframe>[!which(<dataframe>$<col_name> == 0),]
它给了我正确的答案
有人能解释为什么会这样吗?它返回一个索引,可用于对数据帧
(或其他任何内容)进行正/负索引。但是代码>位置向量将仅返回FALSE
s。试试!5
。以下是一些例子:
df <- data.frame(col1=1:6, col2=rep(0:1, 3))
> df
col1 col2
1 1 0
2 2 1
3 3 0
4 4 1
5 5 0
6 6 1
# an vector of positions
> which(df$col2 == 0)
[1] 1 3 5
# ! this vector
> !which(df$col2 == 0)
[1] FALSE FALSE FALSE
# - this vector
> -which(df$col2 == 0)
[1] -1 -3 -5
df
col1 col2
1 1 0
2 2 1
3 3 0
4 4 1
5 5 0
6 6 1
#位置向量
>其中(df$col2==0)
[1] 1 3 5
# ! 这个向量
> !其中(df$col2==0)
[1] 假假假假
#-这个向量
>-其中(df$col2==0)
[1] -1 -3 -5
返回一个索引,该索引可用于对数据帧(或任何其他内容)进行正向/反向索引。但是代码>位置向量将仅返回FALSE
s。试试!5
。以下是一些例子:
df <- data.frame(col1=1:6, col2=rep(0:1, 3))
> df
col1 col2
1 1 0
2 2 1
3 3 0
4 4 1
5 5 0
6 6 1
# an vector of positions
> which(df$col2 == 0)
[1] 1 3 5
# ! this vector
> !which(df$col2 == 0)
[1] FALSE FALSE FALSE
# - this vector
> -which(df$col2 == 0)
[1] -1 -3 -5
df
col1 col2
1 1 0
2 2 1
3 3 0
4 4 1
5 5 0
6 6 1
#位置向量
>其中(df$col2==0)
[1] 1 3 5
# ! 这个向量
> !其中(df$col2==0)
[1] 假假假假
#-这个向量
>-其中(df$col2==0)
[1] -1 -3 -5
由于返回的内容:
> !which(x = mtcars$cyl == 4)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> -which(x = mtcars$cyl == 4)
[1] -3 -8 -9 -18 -19 -20 -21 -26 -27 -28 -32
还值得注意的是:
identical(mtcars[!mtcars$cyl == 4, ],
+ mtcars[mtcars$cyl != 4, ])
[1] TRUE
因为返回的内容:
> !which(x = mtcars$cyl == 4)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> -which(x = mtcars$cyl == 4)
[1] -3 -8 -9 -18 -19 -20 -21 -26 -27 -28 -32
还值得注意的是:
identical(mtcars[!mtcars$cyl == 4, ],
+ mtcars[mtcars$cyl != 4, ])
[1] TRUE
因此,which
将返回满足$==0
的行索引向量,而不是逻辑(真/假)向量。因此,当你用否定的话!你胡说八道。您实际上是在做这个!c(0,1,2,3,4)
返回TRUE-FALSE
-
符号将删除which
语句返回的行,这是您想要的
或者,您可以:
demoSowhich
将返回满足$==0
的行索引向量,而不是逻辑(真/假)向量。因此,当你用否定的话!你胡说八道。您实际上是在做这个!c(0,1,2,3,4)
返回TRUE-FALSE
-
符号将删除which
语句返回的行,这是您想要的
或者,您可以:
demo让我们以向量为例:
x <- c(1, 10, 30, 5)
但是如果我使用
(求反运算符)在哪个(b)
上而不是-
(命令将变成x[!哪个(b)]
),结果将完全错误,这是因为求反运算符可以应用于整数而不返回错误:如果整数等于0,它将返回TRUE,如果整数与0不同,它将返回FALSE
(请尝试!(-2:2)
)
因此,如果我想通过使用得到正确的结果代码>,我需要将它直接应用于布尔向量
x[ !b ]
让我们以向量为例:
x <- c(1, 10, 30, 5)
但是如果我使用
(求反运算符)在哪个(b)
上而不是-
(命令将变成x[!哪个(b)]
),结果将完全错误,这是因为求反运算符可以应用于整数而不返回错误:如果整数等于0,它将返回TRUE,如果整数与0不同,它将返回FALSE
(请尝试!(-2:2)
)
因此,如果我想通过使用得到正确的结果代码>,我需要将它直接应用于布尔向量
x[ !b ]
对不起,这是很基本的<代码>
是逻辑求反,-
是(在本例中)一元算术运算。如果应用代码>为整数值0
强制为FALSE
,所有其他数字强制为TRUE
:尝试!(0:5)
。那么[which($!=0),]这会给我一个正确的答案吗?当然会。您知道R提供逻辑、整数和字符子集吗?你知道哪个是什么吗?对不起,这是很基本的<代码>
是逻辑求反,-
是(在本例中)一元算术运算。如果应用代码>为整数值0
强制为FALSE
,所有其他数字强制为TRUE
:尝试!(0:5)
。那么[which($!=0),]这会给我一个正确的答案吗?当然会。您知道R提供逻辑、整数和字符子集吗?你知道哪个
做什么吗?如果没有行返回,你会得到数据[-integer(0),]
,这会把事情搞砸。。。这就是为什么which
是个坏主意。如果没有行返回,您将得到数据[-integer(0),]
,这将真正把事情搞砸。。。这就是为什么这是个坏主意。现在它清楚了,我把“!”符号当作否定。现在它清楚了,我把“!”符号当作否定。