r - 在 dplyr 中复制 Base R 操作
问题描述
我正在尝试使用 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
以下是基础 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)
这里发生了什么?!?
解决方案
看起来您在解决方案中使用,但d
在dplyr
解决方案中没有base
使用,您使用(abc[rand, "a"] < e)
的主要区别在于dplyr
您可以使用的解决方案a < e
。下面我刚刚尝试base r
在dplyr
. 它似乎工作
由于dplyr
数据帧的处理,行 ID 不同
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
abc.2 <- abc[rand,][(rand <= f) | (abc[rand, "a"] < e),]
abc.3 <- abc[rand,]
abc.3 <- abc.3 %>% filter(rand <= f | a < e)
> all.equal(abc.2$a, abc.3$a)
[1] TRUE
> all.equal(abc.2$b, abc.3$b)
[1] TRUE
> all.equal(abc.2$c, abc.3$c)
[1] TRUE
> all.equal(abc.2$d, abc.3$d)
[1] TRUE
> all.equal(abc.2, abc.3)
[1] "Attributes: < Component “row.names”: Mean relative difference: 0.7186996 >"
推荐阅读
- mysql - 使用联合时,MySql 查询不排序记录
- c# - “IConfiguration”不包含“GetSection”的定义
- git - 有没有办法在gitlab中自动合并分支?
- spring-boot - Spring在POST上启动多对多重复密钥问题,而不是在PUT上
- ajax - 如果我只使用 fetch() 函数来发送数据,是否需要使用 then() 函数?
- python - 使用匹配的 Multiindex 值访问 pandas 数据帧的行
- python-3.x - 如何使用 Telethon 更改我的电报帐户名称?
- asciidoc - Asciidoctor 中的 pygments 未显示行号
- c++ - 在 OpenCV C++ 中复制 MATLAB 代码(bwConnComp 和 regionprops)
- react-native - react-native-reanimated 和 react-native-stack 是如何连接的?