Найти повторения в парах, распределенных в 2 столбцах data.frame
Допустим, нужно найти частоты для каждой пары:
Например. Mark
-Maria
появляется три раза, а остальные один раз
Name1 Name2
Mark Maria
John Xesca
Steve Rose
Mark Maria
John John
Mark Maria
John Xesca
Какой лучший способ выполнить это? Примите во внимание, что это частоты для обоих элементов. Я думаю, что это сложнее, чем ожидалось... Заранее спасибо,
3 ответа
Если вам нужно учесть порядок имен name1 и name2:
subset(as.data.frame(table(df)), Freq > 0)
# Name1 Name2 Freq
# 1 John John 1
# 5 Mark Maria 3
# 9 Steve Rose 1
# 10 John Xesca 2
На самом деле вам даже не нужно вставлять, просто группа:
dat %>%
group_by(Name1, Name2) %>%
count()
# # A tibble: 4 x 3
# # Groups: Name1, Name2 [4]
# Name1 Name2 n
# <fct> <fct> <int>
# 1 John John 1
# 2 John Xesca 2
# 3 Mark Maria 3
# 4 Steve Rose 1
Вы можете paste0
вместе столбцы тогда count
с dplyr
:
library(dplyr)
dat %>%
mutate(pasted = paste0(Name1,Name2)) %>%
group_by(pasted) %>%
count()
# # A tibble: 4 x 2
# # Groups: pasted [4]
# pasted n
# <chr> <int>
# 1 JohnJohn 1
# 2 JohnXesca 2
# 3 MarkMaria 3
# 4 SteveRose 1
Обратите внимание, что JohnXesca
будет рассматриваться как отличается от XescaJohn
,
Данные:
tt <- "Name1 Name2
Mark Maria
John Xesca
Steve Rose
Mark Maria
John John
Mark Maria
John Xesca"
dat <- read.table(text=tt, header = T)
Мы перебираем строки набора данных, sort
а также paste
это вместе, а затем получить частоту с table
table(apply(df1, 1, function(x) paste(sort(x), collapse='-')))
# John-John John-Xesca Maria-Mark Rose-Steve
# 1 2 3 1
данные
df1 <- structure(list(Name1 = c("Mark", "John", "Steve", "Mark", "John",
"Mark", "John"), Name2 = c("Maria", "Xesca", "Rose", "Maria",
"John", "Maria", "Xesca")), class = "data.frame", row.names = c(NA,
-7L))