组合顺序正确

时间:2019-05-28 09:38:34

标签: r

我正在处理变量组合。在我的模型中,组合(A,B)将类似于(B,A)。我想重塑数据,以便以相同的顺序获得相似的组合。

我尝试使用duplicated函数并使用paste函数,但是我没有解决问题。

这是我的第一张桌子:

df <- data.frame(V1=c("A","A","A","B","B","B"),
                 V2=c("B","C","D","A","D","A"))

这是我想获得的:

df2 <- data.frame(V1=c("A","A","A","B","B","B"),
                  V2=c("B","C","D","A","D","A"),
                  Test=c("OK","OK","OK","FALSE","OK","FALSE"),
                  V1b=c("A","A","A","A","B","A"),
                  V2b=c("B","C","D","B","D","B"))

2 个答案:

答案 0 :(得分:2)

假设“正确顺序”是字母顺序,则可以使用

alphabetical <- function(x,y){x < y}

当x,y按字母顺序排序时返回true,否则返回false。

编辑:这是一个可行的解决方案:


df_sorted <- df %>% rowwise() %>% mutate(Test = alphabetical(as.character(V1),as.character(V2))) %>% 
                 mutate(V1b = if (Test) {
                  as.character(V1)
                } else {
                  as.character(V2)
                }) %>% 
                mutate(V2b = if (Test) {
                  as.character(V2)
                } else {
                  as.character(V1)
                })

答案 1 :(得分:1)

使用dplyr,您可以执行以下操作:

df %>%
 mutate(V1b = pmin(V1, V2), 
        V2b = pmax(V1, V2),
        Test = paste0(V1, V2) != paste0(V1b, V2b))

  V1 V2 V1b V2b  Test
1  A  B   A   B FALSE
2  A  C   A   C FALSE
3  A  D   A   D FALSE
4  B  A   A   B  TRUE
5  B  D   B   D FALSE
6  B  A   A   B  TRUE