我一直在尝试将集群结构的长数据集重整为宽格式:在每个集群中,宽格式将有两对列,分别代表长格式度量。
以下是长格式的示例:
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是聚类ID(家庭ID),而value是度量。
我不希望用1行4列来表示家庭中每个成员的值,而是希望宽格式具有多行,其中2列显示成对的家庭成员值。例如,对于大小为3的族,宽格式将包括3行,指示成员1-2、1-3、2-3的值。
这是理想的宽幅格式:
答案 0 :(得分:4)
您正在寻找一种自我加入的方式:
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