我有数据框"a",它有一个名为"VAL"的变量.我想计算VAL值为23或24的元素.
我使用了两个有效的代码:
nrow(subset(a,VAL==23|VAL==24)
nrow(subset(a,VAL %in% c(23,24)))
Run Code Online (Sandbox Code Playgroud)
但是,我尝试了其他代码,它提供了意想不到的输出,我不知道为什么.
nrow(subset(a,VAL ==c(23,24)))
Run Code Online (Sandbox Code Playgroud)
即使我改变了23和24的顺序,它也会产生不同的意外输出.
nrow(subset(a,VAL ==c(24,23)))
Run Code Online (Sandbox Code Playgroud)
为什么这些代码不正确?他们到底在做什么?
通过一个示例来说明它出错的地方:
a <- data.frame(VAL=c(1,1,1,23,24))
a
# VAL
#1 1
#2 1
#3 1
#4 23
#5 24
Run Code Online (Sandbox Code Playgroud)
这些工作:
a$VAL %in% c(23,24)
#[1] FALSE FALSE FALSE TRUE TRUE
a$VAL==23 | a$VAL==24
#[1] FALSE FALSE FALSE TRUE TRUE
Run Code Online (Sandbox Code Playgroud)
在比较时,由于矢量回收,以下情况不起作用 - 请注意以下警告消息:
a$VAL ==c(23,24)
#[1] FALSE FALSE FALSE FALSE FALSE
#Warning message:
#In a$VAL == c(23, 24) :
# longer object length is not a multiple of shorter object length
Run Code Online (Sandbox Code Playgroud)
最后一段代码回收了您正在测试的内容并且基本上是比较:
c( 1, 1, 1, 23, 24) #to
c(23, 24, 23, 24, 23)
Run Code Online (Sandbox Code Playgroud)
...所以你没有得到任何返回的行.改变订单会给你
c( 1, 1, 1, 23, 24) #to
c(24, 23, 24, 23, 24)
Run Code Online (Sandbox Code Playgroud)
...并且你会得到两行返回(通过纯粹的运气给出了预期的结果,但它不适合使用).
| 归档时间: |
|
| 查看次数: |
335 次 |
| 最近记录: |