我正在尝试使其工作:
test.ROOT.triples <- triples %>%
filter(dep_rel.y %in% c("ROOT"),
{
if(verb_head_token_id == neg.adverb_head_token_id) filter (subject_head_token_id == neg.adverb_head_token_id,
verb_head_token_id == neg.adverb_head_token_id,
verb_token_id == object_head_token_id)
else
filter(subject_head_token_id == verb_head_token_id,
verb_token_id == object_head_token_id))
}
我的语法不太正确。我收到有关无与伦比的左括号和右括号的消息。
如果未在if / else语句中使用此代码,则可以使用,但是我想在if / else语句中使用dplyr过滤器。
先谢谢您。
答案 0 :(得分:0)
如果dplyr中的else语句具有某种特殊的语法,则我永远不会在Filter中使用它们,而且我不确定这是否可行。一种解决方案可能是仅过滤两个单独的数据帧,然后在需要时将它们加入。
为了便于阅读,我将过滤器语句分开,但是您可以将它们全部放在同一过滤器语句中,并用逗号分隔。
triples %>%
filter(dep_rel.y %in% c("ROOT")) %>%
filter(verb_head_token_id == neg.adverb_head_token_id) %>%
filter(subject_head_token_id == neg.adverb_head_token_id) %>%
filter(verb_head_token_id == neg.adverb_head_token_id) %>%
filter(verb_token_id == object_head_token_id) -> FirstDF
triples %>%
filter(dep_rel.y %in% c("ROOT")) %>%
filter(subject_head_token_id == verb_head_token_id) %>%
filter(verb_token_id == object_head_token_id) -> SecondDF
您可以查找rbind来重新连接它们(如果您甚至愿意,我认为下游分析会有所不同,因此将它们分开可能会更干净)。
只是为了向您展示if else语句如何在dplyr管道中工作,您可以创建一个索引来用新变量标记不同质量的行。演示了dplyr中IF Else的结构:
NewItem = if_else(logicals, WhatHappensIfTrue, WhatHappensIfFalse)
triples %>% mutate(Category = if_else(verb_head_token_id == neg.adverb_head_token_id &
subject_head_token_id == neg.adverb_head_token_id &
verb_head_token_id == neg.adverb_head_token_id &
verb_token_id == object_head_token_id, #comma denotes end of "if" logical
1, #This 1 is what happens if logical(s) TRUE
0)) #The zero is "else" - when logical(s) FALSE. It CAN be another if_else.