【问题标题】:Using dplyr, finding if selected column values are matching with other column value in R data frame使用 dplyr,查找选定的列值是否与 R 数据框中的其他列值匹配
【发布时间】:2025-11-27 05:05:02
【问题描述】:

我有一个数据框,列数超过 150 个,例如

df <- data.frame(name = c("Andy", "Bob", "Andy", "Cha", "Andy", "Bob", "Dil"), 
                 num = c(1,NA, 0,NA, 1, NA, 0), 
                 place=c("Andy", "Bob", "Andy", "Cha", "Andy", "Bob", "Dil"))

它将数据框显示为

name num place
1 Andy   1  Andy
2  Bob  NA   Bob
3 Andy   0  Andy
4  Cha  NA   Cha
5 Andy   1  Andy
6  Bob  NA   Bob
7  Dil   0   Dil

现在我看到,虽然变量名nameplace 不同,但第1 列(name)和第3 列(place)的值是相同的。我的数据框中有 150 列。所以我想找出与名为name的变量(第1列)代表相似类型信息的变量。

【问题讨论】:

  • 您可以使用duplicated.default 对附加内容进行子集化,例如df[!duplicated.default(df)]
  • 我的数据框中有 150 列。变量“地点”就是其中之一。所以我想找出与名为“name”(column1)的变量代表相似类型信息的变量。在初始级别,我不知道变量“地点”。我必须找出变量“地点”列
  • 如果你想要重复,names(df)[duplicated.default(df)]

标签: r dplyr


【解决方案1】:

如果要测试两列是否严格相同,请使用identical(),例如

purrr::map_lgl(df, ~ identical(., df$name))

你得到:

 name   num place 
 TRUE FALSE  TRUE 

【讨论】:

    【解决方案2】:

    扩展 Alistaire 的评论,提取重复和非重复列的完整解决方案如下所示。

    df <- data.frame(name = c("Andy", "Bob", "Andy", "Cha", "Andy", "Bob", "Dil"), 
                     num = c(1,NA, 0,NA, 1, NA, 0), 
                     place=c("Andy", "Bob", "Andy", "Cha", "Andy", "Bob", "Dil"),
                     num2 = c(1,NA, 0,NA, 1, NA, 0))
    library(magrittr)
    # duplicated columns
    df[1,duplicated.default(df)] %>% names(.)
    # non-duplicated columns
    df[1,!duplicated.default(df)] %>% names(.)
    

    ...和输出:

    > df[1,duplicated.default(df)] %>% names(.)
    [1] "place" "num2" 
    > df[1,!duplicated.default(df)] %>% names(.)
    [1] "name" "num" 
    >
    

    【讨论】:

      【解决方案3】:

      如果您有兴趣获取具有相同第一列值的列的位置,可以使用以下代码:

      which(apply(df[, -1], 2, function(x)all(x == df[, 1])))
      

      希望对你有所帮助。

      【讨论】: