从长到宽 - 将一列(具有多个度量)转换为一对列
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
我一直在尝试将聚类结构的长数据集重塑为宽格式:在每个聚类中,宽格式将有两对列代表长格式度量。
这是一个长格式的例子:
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