r - 在 R 的每一列中查找并保留重复项

标签 r tidyverse janitor

有什么方法可以使用 tidyverse 的 add_count() %>% filter() 或 distinct() 或看门人的 get_dupes() 来查找并保留每列的重复项。无需将不同列的项目相互比较,每个列都需要单独考虑。

data1 <-tribble(
  ~colA, ~colB,
  "a",   1,
  "b",   1,
  "c",   2,
  "c",   3
) 

预期输出为

colA colB

c   1   

    

最佳答案

您可以尝试使用 map_dfc,它将映射到列上并按列绑定(bind)输出返回数据框

library(tidyverse)
data1  %>% 
  map_dfc(~.x[duplicated(.x)])

# A tibble: 1 x 2
  colA   colB
  <chr> <dbl>
1 c         1

然而,当每列由于回收而具有不同数量的重复项时,这将导致不需要的行为(当对要求它们具有相同长度的两个向量应用操作时 - 如列绑定(bind),R 会自动重复较短的那个,直到它足够长以匹配较长的那个)。

data1 <-tribble(
  ~colA, ~colB,
  "a",   1,
  "b",   1,
  "c",   2,
  "c",   3,
  "d",   1,
) 

data1  %>% 
  map_dfc( ~.x[duplicated(.x)])

# A tibble: 2 x 2
  colA   colB
  <chr> <dbl>
1 c         1
2 c         1

这里colA已经被回收以匹配colB的长度。在这种情况下,您最好返回带有 map

的列表
data1  %>% 
  map( ~.x[duplicated(.x)])
#output
$colA
[1] "c"

$colB
[1] 1 1

关于r - 在 R 的每一列中查找并保留重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67832932/

相关文章:

r - 使用自定义函数命名由 `nest` (tidyr) 创建的列中的项目

r - 计算字符串中子字符串的出现次数

r - 创建3路表: tabyl output sorting

r - 将任意类的列转换为另一个 data.table 中匹配列的类

r - dplyr 过滤器功能给出了错误的数据

r - 是否可以创建插图?

r - 如何选择所有列以及附加表达式

r - R tidyverse 中根据另一个数据帧中的范围匹配一个数据帧

r - 如何将 Janitor::tabyl 应用于数据表上的几列?

r - 迭代 R 中交叉表的指定列