Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 带%>;%的多个条件_R_Conditional_Magrittr - Fatal编程技术网

R 带%>;%的多个条件

R 带%>;%的多个条件,r,conditional,magrittr,R,Conditional,Magrittr,这似乎是一个应该出现在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" "P

这似乎是一个应该出现在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管道操作符
%%>%%
,因为我喜欢将其用于更可读的代码(这很有效):

但是,这样做没有意义(这不起作用):


有什么想法吗?

我想举一个更具重复性的例子,比如说,你试过拆分过滤器吗

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")
#匹配以GV开头且不以Y结尾的字符串
grep(“^GV[^Y]”,foo,value=TRUE)
#[1]“GV1”“GV2”“GV3”“GV4”“GV5”“GV6”“GV7”“GV8”“GV9”
#资料

foo使用@Pogibas的数据,您可以使用
{
:

foo %>% {substr(.,start=1,stop=2) == "GV" & substr(.,start=3,stop=3) != "Y"}
# [1] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
# [19] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

您的最终目标是什么?请在您的问题中给出一个答案!您是否尝试过在
substr(colnames(df),start=3,stop=3)中将
colnames(df)
替换为
!=“Y”
(以及删除最后的
]
)?最终目标是简化代码。使用magrittr代码完成第一行代码是最终目标。您是否尝试过将
select()
contains()
starts\u with()
组合使用?@chris完成了答案?或者有什么方法可以改进它?
# 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")
foo %>% {substr(.,start=1,stop=2) == "GV" & substr(.,start=3,stop=3) != "Y"}
# [1] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
# [19] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE