使用dplyr,查找所选列值是否与R数据帧中的其他列值匹配

时间:2018-01-27 23:28:10

标签: r dplyr

我有一个数据框,有超过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列)类似的信息类型的变量。

3 个答案:

答案 0 :(得分:0)

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

+====+========+========+
| id | group1 | group2 |
+====+========+========+
|  1 | a      | b      |
+----+--------+--------+
|  1 | b      | c      |
+----+--------+--------+
|  1 | c      | d      |
+----+--------+--------+
|  1 | d      | -      |
+----+--------+--------+
|  2 | a      | b      |
+----+--------+--------+
|  2 | b      | -      |
+----+--------+--------+
|  1 | c      | d      |
+----+--------+--------+
|  1 | d      | -      |
+----+--------+--------+

希望它会对你有所帮助。

答案 1 :(得分:0)

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

commonjs

...和输出:

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(.)

答案 2 :(得分:0)

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

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

你得到:

 name   num place 
 TRUE FALSE  TRUE