r - 带有 %>% 的多个条件
问题描述
这似乎是一个应该在 stackoverflow/google 中的问题,但它不是(或者至少我找不到它)所以我会在这里问它:
可重现的例子:
colnames(df)
"Z1" "Z2" "Z3" "GV1" "GV2" "GV3" "GV4" "GV5" "GV6" "GV7" "GV8" "GV9" "GVY" "EN1" "EN2" "EN3" "EN4" "EN5" "EN6" "EN7" "EN8" "EN9" "ENY" "PV1" "PV2" "PV3" "PV4" "PV5" "PV6" "PV7" "PVY"
我正在尝试理解/执行下一个代码:
colnames(df[substr(colnames(df),start=1,stop=2) == "GV" & substr(colnames(df),start=3,stop=3) != "Y"])
使用 magrittr 管道运算符%>%
,因为我喜欢将它用于更易读的代码(这有效):
library(magrittr)
df %>%
colnames %>%
substr(start=1,stop=2) == "GV"
但是,这样做没有意义(这不起作用):
df %>%
colnames %>%
substr(start=1,stop=2) == "GV" & substr(colnames(df),start=3,stop=3) != "Y"]
有任何想法吗?
解决方案
如果您的目标是简化代码,那么您可以使用正则表达式:
# Match string that starts with GV and is not fallowed by Y
grep("^GV[^Y]", foo, value = TRUE)
# [1] "GV1" "GV2" "GV3" "GV4" "GV5" "GV6" "GV7" "GV8" "GV9"
# Data
foo <- c("Z1", "Z2", "Z3", "GV1", "GV2", "GV3", "GV4", "GV5", "GV6", "GV7", "GV8", "GV9", "GVY", "EN1", "EN2", "EN3", "EN4", "EN5", "EN6", "EN7", "EN8", "EN9", "ENY", "PV1", "PV2", "PV3", "PV4", "PV5", "PV6", "PV7", "PVY")
推荐阅读
- python - 合并数组和绘图
- maven - 无法使用 Maven jar 插件添加资源
- ios - 使用静态变量引用 viewContext 以实现 iOS 9 和 iOS 10 Swift 4 的核心数据
- json - 如何从 json 文件中获取标签并将它们附加到图像
- php - 在 WooCommerce 管理页面中仅显示本地订单
- c# - SemaphoreSlim.WaitAsync 如何允许顺序执行异步函数?
- reactjs - 创建一个抽象逻辑的组件(从现有代码)
- android - 如何减少在 Android RecyclerVIew 中单击项目时的操作延迟?
- c++ - Vim 缩进 C++11 lambda,在新行上有左大括号
- javascript - JavaScript - 从“for”循环中选择最后一项