从长到宽 - 将一列(具有多个度量)转换为一对列

long to wide - converting one column (with multiple measures) into a pair of columns

我一直在尝试将聚类结构的长数据集重塑为宽格式:在每个聚类中,宽格式将有两对列代表长格式度量。

这是一个长格式的例子:

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 is the unique variable for each individual, fam is the clustering id (family id), and value is the measure.

我不想用 1 行 4 列表示家庭中每个成员的值,而是希望宽格式有多行 2 列显示成对的家庭成员值。例如,对于大小为 3 的系列,宽格式将包括 3 行,指示成员 1-2、1-3、2-3 的值。

这是理想的宽幅面:

wide format

您正在寻找自连接:

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