删除重复的列对,基于 2 列对行进行排序

标签 r

这个问题在这里已经有了答案:





pair-wise duplicate removal from dataframe [duplicate]

(4 个回答)


4年前关闭。




在下面的数据框中,如果行有 Var1 的重复对(1 4 和 4 1 被认为是同一对),我只想保留一次行和 Var2 .我想到了排序Var1Var2在行内,然后根据 Var1 删除重复的行和 Var2 .但是,我没有达到我想要的结果。

这是我的数据的样子:

Var1 <- c(1,2,3,4,5,5)
Var2 <- c(4,3,2,1,5,5)
f <- c("blue","green","yellow","red","orange2","grey")
g <- c("blue","green","yellow","red","orange1","grey")
testdata <- data.frame(Var1,Var2,f,g)

我可以在行内排序,但是 f 和 g 列的值应该保持不变,我该怎么做?
testdata <- t(apply(testdata, 1, function(x) x[order(x)]))
testdata <- as.data.table(testdata)

然后,我想根据 Var1 删除重复的行和 Var2
我想得到这个结果:
Var1 Var2 f       g
1    4    blue    blue
2    3    green   green
5    5    orange2 orange1

谢谢你的帮助!

最佳答案

如果人们有兴趣使用 dplyr 解决这个问题:

library(dplyr)
testdata %>% 
   rowwise() %>%
   mutate(key = paste(sort(c(Var1, Var2)), collapse="")) %>%
   distinct(key, .keep_all=T) %>%
   select(-key)

# Source: local data frame [3 x 4]
# Groups: <by row>
# 
# # A tibble: 3 × 4
#    Var1  Var2       f       g
#   <dbl> <dbl>  <fctr>  <fctr>
# 1     1     4    blue    blue
# 2     2     3   green   green
# 3     5     5 orange2 orange1

关于删除重复的列对,基于 2 列对行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29170099/

相关文章:

r - 使用 R 在一张图中绘制光谱数据

python - 基于两列作为索引创建新变量,一列作为新变量名称 python pandas 或 R

r - 如何对 R 中多个矩阵列表的相同单元格进行平均

r - Shinyapps 部署在本地计算机上工作时无法工作

r - 如何用数字索引替换字符串

r - R中的逻辑下标太长

r Shiny : allow user to download shiny output in a desired directory

r - ls 表示交互项的对比

r - 具有数据层的ggplot2刻面

r - 使用for回路和georoute计算行驶距离时跳过错误