R中的自我迭代

时间:2018-05-08 18:07:55

标签: r tidyverse

我在Excel中有一个名为Name的列(下面创建了一个示例数据),其格式如下

名称(列标题)
A,Y - B,X
C,Q - W,R
和列表继续和 B,X - A,Y
W,R - C,Q
T,U - K,M

每行有相应的20个其他列。我需要以反向格式删除Name列中的所有行。例如" B,X - A,Y"和" W,R - C,Q"及其所有相应的列值,但行" A,Y - B,X"和" C,Q - W,R"不应删除。

2 个答案:

答案 0 :(得分:1)

我会这样做:

library(tidyr)
library(dplyr)
dat %>% separate(Name, into = c("pair1", "pair2"), sep = " - ", remove = FALSE) %>%
    mutate(p1 = pmin(pair1, pair2), p2 = pmax(pair1, pair2)) %>%
    distinct(p1, p2, .keep_all = TRUE) %>%
    select(-pair1, -pair2, -p1, -p2)
# # A tibble: 6 x 1
#         Name
#        <chr>
# 1  A,Y - B,X
# 2  C,Q - W,R
# 3  E,F - B,T
# 4 E,T - F, B
# 5  Q,P - P,O
# 6  T,U - K,M

分开对,使用pminpmax对它们进行一致排序,最后对已排序的对进行重复数据删除(仅保留第一次出现)。

答案 1 :(得分:0)

您可以使用strsplit函数在数据框中创建两个新列 - “ - ”左侧的一列和右侧的一列。然后,您只需对数据框进行子集化,以保留所需的行。