我在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"不应删除。
答案 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
分开对,使用pmin
和pmax
对它们进行一致排序,最后对已排序的对进行重复数据删除(仅保留第一次出现)。
答案 1 :(得分:0)
您可以使用strsplit函数在数据框中创建两个新列 - “ - ”左侧的一列和右侧的一列。然后,您只需对数据框进行子集化,以保留所需的行。