在dplyr中选择时,使用否定的结束和开始
假设我有这个数据框:在dplyr中选择时,使用否定的结束和开始,r,dplyr,R,Dplyr,假设我有这个数据框: df <- data.frame(foo = runif(10), bar = runif(10), boo = runif(10)) # bar boo foo # 1 0.9561519 0.2152603 0.90986454 # 2 0.9971676 0.8101082 0.78158207 # 3 0.6211555 0.9281131 0.59828786 # 4 0.2332080 0.606342
df <- data.frame(foo = runif(10), bar = runif(10), boo = runif(10))
# bar boo foo
# 1 0.9561519 0.2152603 0.90986454
# 2 0.9971676 0.8101082 0.78158207
# 3 0.6211555 0.9281131 0.59828786
# 4 0.2332080 0.6063427 0.88131253
# 5 0.6572534 0.3698642 0.61227246
# 6 0.6940809 0.1464231 0.30366349
# 7 0.3924425 0.3706134 0.05930352
# 8 0.7918689 0.8808447 0.90571744
# 9 0.2553619 0.9632559 0.52549238
# 10 0.3772701 0.7657140 0.05102249
正如预期的那样,这将产生以下结果:
# boo
# 1 0.2152603
# 2 0.8101082
# 3 0.9281131
# 4 0.6063427
# 5 0.3698642
# 6 0.1464231
# 7 0.3706134
# 8 0.8808447
# 9 0.9632559
# 10 0.7657140
我还可以通过使用对结尾进行求反来选择不以oo结尾的列,如下所示:
df %>%
select(intersect(starts_with("b"), ends_with("oo")))
df %>%
select(-ends_with("oo"))
# bar
# 1 0.9561519
# 2 0.9971676
# 3 0.6211555
# 4 0.2332080
# 5 0.6572534
# 6 0.6940809
# 7 0.3924425
# 8 0.7918689
# 9 0.2553619
# 10 0.3772701
现在,我想结合这些行为。也就是说,我想要一个列,它不以oo
结尾,以b
开头。因此,在我的示例中,我应该只获取列bar
——但我没有
df %>%
select(intersect(starts_with("b"), -ends_with("oo")))
# data frame with 0 columns and 10 rows
上面,我展示了intersect
方法是有效的,并且的否定以结束也有效,但是结合这些方法并不能得到我期望的结果。有人能告诉我哪里出了问题吗
编辑:事实上,现在我在一个新的会话中重新运行了它
UseMethod(“选择”)中出错:
没有适用于“函数”类对象的“选择”方法
使用setdiff
:
df %>%
select(setdiff(starts_with("b"), ends_with("oo")))
# bar
# 1 0.5248344
# 2 0.8835366
# 3 0.3486265
# 4 0.6382468
# 5 0.7378287
# 6 0.2878244
# 7 0.1927559
# 8 0.9787019
# 9 0.5393251
# 10 0.9229542
负数表示法可以通过选择理解,但不能通过相交理解