от длинного к широкому - преобразование одного столбца (с несколькими показателями) в пару столбцов - PullRequest
0 голосов
/ 19 апреля 2019

Я пытался преобразовать длинный набор данных кластерной структуры в широкий формат: в каждом кластере широкий формат будет иметь две пары столбцов, представляющих меру длинного формата.

Вот пример длинного формата:

set.seed(20190419)
   dt1<-data.frame(
     id=sample(1:10),
     fam=c(rep(c('a','b'),each=3),rep(c('d'),each=4)),
     value=rnorm(10))

dt1  

id - уникальная переменная для каждого человека, fam - идентификатор кластеризации (идентификатор семьи), а значение - мера..

Вместо 1 строки и 4 столбцов, представляющих значения каждого члена в семействе, я бы хотел, чтобы в широком формате было несколько строк с 2 столбцами, показывающими пары значений члена семьи.Например, с семейством размера 3 широкий формат будет включать 3 строки, указывающие значения из элементов 1-2, 1-3, 2-3.

А вот идеальный широкий формат:

широкоформатный

1 Ответ

4 голосов
/ 20 апреля 2019

Вы ищете самостоятельное соединение:

dt1 %>% left_join(dt1, by = "fam") %>%
  filter(id.x < id.y)
#    id.x fam    value.x id.y    value.y
# 1     1   a  0.1231950    2  0.1090744
# 2     1   a  0.1231950    6  0.6753560
# 3     2   a  0.1090744    6  0.6753560
# 4     5   b  1.2385780    7  0.7440739
# 5     5   b  1.2385780   10  2.4763114
# 6     7   b  0.7440739   10  2.4763114
# 7     3   d -2.3296467    8  0.1370525
# 8     3   d -2.3296467    4 -0.5790046
# 9     3   d -2.3296467    9  0.3267871
# 10    8   d  0.1370525    9  0.3267871
# 11    4   d -0.5790046    8  0.1370525
# 12    4   d -0.5790046    9  0.3267871
...