Как выбрать дубликаты строк во фрейме данных? - PullRequest
1 голос
/ 02 февраля 2020

У меня есть что-то вроде этого:

df <- data.frame('C1' = c("A","A","C","D","E","E","E"), 'C2' = c("B1","B2","B3","B1","B1","B2","B4"))

И я хотел бы что-то вроде этого:

C1  C2
A   B1
A   B2
E   B1
E   B2
E   B4

Тогда я хотел бы что-то вроде этого:

B1 B2 2  (because A and E)
B1 B4 1  (because only E)
B2 B4 1  (because only E)

Ответы [ 3 ]

3 голосов
/ 02 февраля 2020

Один dplyr и tidyr подход может быть следующим:

df %>%
 group_by(C1) %>%
 filter(n() >= 2) %>%
 mutate(C3 = list(combn(C2, 2, FUN = paste, collapse = ","))) %>%
 slice(1) %>%
 unnest(C3) %>%
 ungroup() %>%
 count(C3)

  C3        n
  <chr> <int>
1 B1,B2     2
2 B1,B4     1
3 B2,B4     1

Во-первых, он отфильтровывает случаи из C1 только с одним наблюдением. Затем он объединяет каждые два элемента из C2 на группу. Наконец, он подсчитывает количество появлений на пару.

Учитывая, что в группе могут быть дублированные значения C2:

df %>%
 group_by(C1) %>%
 filter(n() >= 2) %>%
 mutate(C3 = list(combn(unique(C2), 2, FUN = paste, collapse = ",")))  %>%
 slice(1) %>%
 unnest(C3) %>%
 ungroup() %>%
 count(C3)
2 голосов
/ 02 февраля 2020

Вы можете попробовать:

library(dplyr)

df %>% 
  full_join(df, by = 'C1') %>%
  filter(!C2.x == C2.y, 
         !gsub("\\D", "", C2.y) < gsub("\\D", "", C2.x)
         ) %>%
  count(Combination = paste(C2.x, C2.y))

Вывод:

# A tibble: 3 x 2
  Combination     n
  <chr>       <int>
1 B1 B2           2
2 B1 B4           1
3 B2 B4           1
0 голосов
/ 02 февраля 2020

Попробуйте использовать библиотеки dplyr и data.table

install.package("tidyverse")
install.package("data.table")

library(tidyverse)
library(data.table)


df2 = df %>%
  filter(C1 %in% c('A', 'E')) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...