如何检查R中的数据帧中的列是否相同[产生矩阵]

最后发布: 2017-07-07 11:57:05


问题

我有一个大数据框,ncol = 220,我想比较这些列以查看它们是否相同,并生成一个矩阵以便于识别。

所以我有的是

      x    y   z
1   dog   dog   cat    
2   dog   dog   dog
3   cat   cat   cat

我想要的是

     x     y     z
x   -     True   False
y   True     -   False
z   False False   -

有没有办法在R中使用same()做到这一点?

r dataframe
回答

要赞美stringdist关于stringdist的评论,这很容易,

library(stringdist)

stringdistmatrix(df, df) == 0

#      [,1]  [,2]  [,3]
#[1,]  TRUE  TRUE FALSE
#[2,]  TRUE  TRUE FALSE
#[3,] FALSE FALSE  TRUE


回答

可能效率不是很高,但是您可以尝试:

seq_col <- seq_len(ncol(df))
sapply(seq_col, function(i) sapply(seq_col, function(j) identical(df[, i], df[, j])))
      # [,1]  [,2]  [,3]
# [1,]  TRUE  TRUE FALSE
# [2,]  TRUE  TRUE FALSE
# [3,] FALSE FALSE  TRUE

它可以为您提供所需的内容(对角线除外,在这里全部为TRUE),但是必须有一个具有根据字符向量创建距离矩阵的函数的包。 也许与stringdist