在R中的文件的某些行中的列中删除相同的值

时间:2014-07-15 11:56:40

标签: r

我有这样的文件。

1  3
1  2
1  10
1  5
**5  5**
6  7
8  9
4  6
1  2 
**10 10**
......

该文件包含数千行。我想知道,如何删除R中包含相同值的行(包含5 5的行和包含10 10的行)?我知道如何删除重复列或重复行,但如何有选择地删除它们?谢谢。 :)

2 个答案:

答案 0 :(得分:2)

我会使用索引进行此操作,例如使用小数据框:

myDf <- data.frame(a=c(3,5,8,6,9,4,3), b=c(3,3,5,8,9,6,4))
myDf <- myDf[myDf$a != myDf$b,]

答案 1 :(得分:0)

我会考虑编写一个这样的辅助函数:

indicator <- function(indf) {
  rowSums(vapply(indf, function(x) x == indf[, 1], 
                 logical(nrow(indf)))) == ncol(indf)
} 

基本上,该函数会将data.frame中的每一列与data.frame的第一列进行比较,然后检查哪些rowSums与列中的列数相同data.frame

这基本上创建了一个逻辑向量,可用于对data.frame

进行子集化

示例:

mydf <- data.frame(a=c(3,5,8,6,9,4,3), 
                   b=c(3,3,5,8,9,6,4),
                   c=c(3,4,5,6,9,7,2))

indicator(mydf)
# [1]  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE

mydf[!indicator(mydf), ]
#   a b c
# 2 5 3 4
# 3 8 5 5
# 4 6 8 6
# 6 4 6 7
# 7 3 4 2