我试图只返回与2条件过滤器匹配的值。我遇到的问题是有些名称有1个以上的代码而有些名称只有1个。
name <- c("Jeff", "Jeff", "Jill", "Jill", "Angie")
total <- c(123, 234, 345, 456, 567)
code <- c("abc", "xyz", "abc", "xyz", "abc")
table <- data.frame(name, total, code)
全桌
name total code
Jeff 123 abc
Jeff 234 xyz
Jill 345 abc
Jill 456 xyz
Angie 567 xyz
我正在寻找的输出是
name total code
Jeff 123 abc
Jeff 234 xyz
Jill 345 abc
Jill 456 xyz
我试过了 这不起作用,因为它返回所有预期的
library(dplyr)
test1 <- filter(table, code == "xyz" | code == "abc")
我想也许%&gt;%会起作用,但这给了我与OR过滤器相同的东西。
target <- c("xyz", "abc")
test2 <- filter(table, code %in% target)
我不能使用“AND”因为它在同一列中。
test2 <- filter(table, code == "xyz" & code == "abc")
答案 0 :(得分:2)
我会将您的目标定为“选择在其代码列中同时包含xyz
和abc
的所有名称。”您尝试的主要问题是您'没有做任何表示需要按名称执行此操作 - 您只引用了code
列。我们需要使用group_by(name)
:
table %>% group_by(name) %>%
filter("abc" %in% code & "xyz" %in% code)
# # A tibble: 4 x 3
# # Groups: name [2]
# name total code
# <fctr> <dbl> <fctr>
# 1 Jeff 123 abc
# 2 Jeff 234 xyz
# 3 Jill 345 abc
# 4 Jill 456 xyz
我们还需要使用%in%
而不是==
,因为我们要检查代码列中每个模式是否存在某处。 ==
将尝试仅选择具有该模式的各个行,正如您所指出的那样,将导致没有&
条件的行,因为code
不能同时为{{1}和abc
同时。 (Flo.P使用xyz
与any
使用的角色相同。)
答案 1 :(得分:1)
这应该有效
def check_offline(text):
list_pro = open('full-list-bad.txt','r')
content = list_pro.readline()
for ligne in content :
if ligne in text :
remplacement = "*" * len(ligne)
text = text.replace(ligne ,remplacement)
print ligne
return text
print check_offline("this is a shit world " )
答案 2 :(得分:0)
诀窍是使用%in%和&#34;和&#34;。以下是一些示例代码:
target_name = c("Jeff", "Jill")
target_code = c("abc", "xyz")
table %>%
filter( name %in% target_name & code %in% target_code)
输出是您想要的示例:
> table %>%
+ filter( name %in% target_name & code %in% target_code)
name total code
1 Jeff 123 abc
2 Jeff 234 xyz
3 Jill 345 abc
4 Jill 456 xyz
希望它有所帮助。