【发布时间】:2019-04-29 08:38:35
【问题描述】:
我正在尝试使用 dplyr 复制一组操作,但由于某种原因,我的尝试没有达到相同的结果。我的问题是两件事:1.为什么我编写的 dplyr 版本不会产生与基本操作相同的结果,以及 2.什么是最清晰的 dplyr(管道)实现。首先这里是一些我自己的问题规模较小的示例数据:
abc <- data.frame(a = rnorm(100, 5, 6), b = rnorm(100, 2, 3), c = rnorm(100, 0, 5), d = rnorm(100, 50, 3))
rand <- sample(c(1:100), 100, replace = F)
e <- 5
f <- 50
以下是base R中的情况。
# Case 1
abc.2 <- abc[rand,][(rand <= f) | (abc[rand, "a"] < e),]
这是我使用dplyr的尝试,但是abc.3的结果和abc.2不同
# Case 2
abc.3 <- abc[rand,]
abc.3 <- abc.3 %>% filter(d >= f | d < e)
这是怎么回事?!?
【问题讨论】:
-
不幸的是,您的基本示例也不起作用。
-
确实如此,我只是运行它并正确地对数据进行子集化。
-
怎么样?
abc[d, "a"]除了abc$d之外,没有d对象。 -
我编辑了它。它应该是 abc[rand, "a"]。是错别字
-
当 abc 使用 rand 排序时,保留小于 e 的行。