R 从数据框中删除跨列包含重复信息的行 col1

R 从数据框中删除跨列包含重复信息的行 col1,r,R,你可以试试这个(但我相信有更好的方法) cols如果不介意指定列,可以在中执行此操作: indx <- with(dat, (col1 == col2) | (col1 == col3) | (col2 == col3)) dat[!indx, ] # col1 col2 col3 # 2 B A C # 4 D C A 这里有一个替代方案。我还没有在大数据集上进行测试 library(dplyr) dat %>% rowwise() %

你可以试试这个(但我相信有更好的方法)

cols如果不介意指定列,可以在中执行此操作:

indx <- with(dat, (col1 == col2) | (col1 == col3) | (col2 == col3))
dat[!indx, ]
#   col1 col2 col3
# 2    B    A    C
# 4    D    C    A

这里有一个替代方案。我还没有在大数据集上进行测试

library(dplyr)
dat %>%
  rowwise() %>%
  mutate(repeats = max(table(c(col1, col2, col3))) - 1) %>%
  filter(repeats == 0) %>%
  select(-repeats) # if you don't want that column to appear in results


Source: local data frame [2 x 3]

  col1 col2 col3
1    B    A    C
2    D    C    A
或使用任何重复的

library(data.table) #devel version v1.9.5
dat[setDT(melt(as.matrix(dat)))[,uniqueN(value)==.N , Var1]$V1,]
#    col1 col2 col3
#2    B    A    C
#4    D    C    A

我有14个字符的列,这意味着我必须检查91个等价项。如果我经历了列出每一个的麻烦(我不会),r能够处理它吗?理论上它会比使用apply方法运行得更快吗?你的数据有多大?
apply
方法是否花费了太多时间运行?我编辑了我的原始问题,以解决您关于我正在处理的实际数据大小的问题。使用
apply
解决方案大约需要30秒。这可能是不可能的,但我希望能在10秒钟内得到这个数字。@akrun我认为它比
apply
内存效率低,但时间效率更高,我认为它不是一个大的基准测试,只是现在没有时间。@Davidernburg谢谢,我将尝试一些基准测试。我运行了您提供的两行代码,但出现以下错误-is.data中的错误。表(x):找不到函数“melt”@drumminactual抱歉,我加载了
库(重塑2)
@drumminactual您还需要
数据的开发版本。表
有关
uniqueN
,请参阅@akrun,就我在自述文件中所记得的,您不需要对dev版本进行
重塑2
library(dplyr)
dat %>%
  rowwise() %>%
  mutate(repeats = max(table(c(col1, col2, col3))) - 1) %>%
  filter(repeats == 0) %>%
  select(-repeats) # if you don't want that column to appear in results


Source: local data frame [2 x 3]

  col1 col2 col3
1    B    A    C
2    D    C    A
library(data.table) #devel version v1.9.5
dat[setDT(melt(as.matrix(dat)))[,uniqueN(value)==.N , Var1]$V1,]
#    col1 col2 col3
#2    B    A    C
#4    D    C    A
 dat[!apply(dat, 1, anyDuplicated),]
 #   col1 col2 col3
 #2    B    A    C
 #4    D    C    A