我正在 R 工作,如果可能的话更喜欢 dplyr 解决方案。
样本数据:
data.frame(
col1 = c("a", "b", "c", "d"),
col2 = c("a", "b", "d", "a"),
col3 = rep("a", 4L),
col4 = c("a", "b", "d", "a"),
col5 = c("a", "a", "c", "d"),
col6 = rep(c("b", "a"), each = 2L)
)
col1 | col2 | col3 | col4 | 第5栏 | 第 6 栏 |
---|---|---|---|---|---|
a | a | a | a | a | b |
b | b | a | b | a | b |
c | d | a | d | c | a |
d | a | a | a | d | a |
问题
我想知道每一行,col1,col2和col3是否与col4,col5和col6,相同,但应该忽略col1 - col3和col4 - col6的顺序.
因此,对于第 1 行,如果 col1 - col3 分别包含 a、a、b,并且 col4 - col6 分别包含 b、a、a,则将被视为匹配。
想要的结果
在“评估”栏添加注释以帮助理解
col1 | col2 | col3 | col4 | 第5栏 | 第 6 栏 | 评估 |
---|---|---|---|---|---|---|
a | a | a | a | a | b | FALSE(因为 1-3 与 4-6 不同) |
b | b | a | b | a | b | TRUE(因为1-3与4-6相同,如果忽略顺序) |
c | d | a | d | c | a | TRUE(因为1-3与4-6相同,如果忽略顺序) |
d | a | a | a | d | a | TRUE(因为1-3与4-6相同,如果忽略顺序) |
使用 dplyr 您可以执行以下操作:
df %>%
rowwise() %>%
mutate(result = all(sort(c_across(col1:col3)) == sort(c_across(col4:col6))))
# A tibble: 4 × 7
# Rowwise:
col1 col2 col3 col4 col5 col6 result
<chr> <chr> <chr> <chr> <chr> <chr> <lgl>
1 a a a a a b FALSE
2 b b a b a b TRUE
3 c d a d c a TRUE
4 d a a a d a TRUE