我最近遇到困扰我的R
行为。我希望有人可以帮助我理解为什么会发生以下情况。
如果我有一个数据框,并且我想以编程方式从该数据帧中删除行,我可以使用以下示例代码:
x <- data.frame(id = seq(1, 10, 1),
num = sample(1:10, 10, TRUE))
y <- data.frame(id = c(2, 4, 6))
which(x$id %in% y$id)
x <- x[-which(x$id %in% y$id), ]
这完全符合我的期望:
> x
id num
1 1 3
3 3 5
5 5 6
7 7 1
8 8 7
9 9 3
10 10 4
如果我将上述代码中的y
更改为x$id
中不的数字,
x <- data.frame(id = seq(1, 10, 1),
num = sample(1:10, 10, TRUE))
y <- data.frame(id = c(11))
which(x$id %in% y$id)
x <- x[-which(x$id %in% y$id), ]
我原本希望从x
中删除没有行,而是x
为空:
> x
[1] id num
<0 rows> (or 0-length row.names)
有人可以解释为什么会这样吗?我希望得到原始的x
数据框,因为x$id
中没有y$id
的值。
感谢您的帮助。
答案 0 :(得分:1)
如果您没有匹配,则which()
的结果是空向量,因此您要求没有行=空数据框。请注意,在这种情况下否定无效,因为没有任何可否定的内容。
非常清楚,子集中的-
符号没有特殊含义,它只是否定了您传递的整数。如果你没有通过任何东西,就没有什么可以否定的。