【发布时间】:2020-10-15 12:52:27
【问题描述】:
我有一个相当棘手的问题,我似乎无法解决。考虑下表:
demo <- data.table(Person = c(1,2,2,3,4,5,6,4,7,8,9,10),
Property = c("A","A","B","B","A","B","C","C","D","E","F","E"),
Period = rep(2017, 12))
一个人可以拥有多个属性,一个人可以拥有多个属性,因此是多对多关系。但是,我想做的是通过聚合从这种多对多关系创建一对一的关系。我们可以说:一群人买了这些房产。
在我们的demo 案例中:
第 1 个人购买了 A 人2买了A 4人买了A 人2买了B 3人买了B 5人买了B 4人买了C 6人买了C
这组人 (1,2,3,4,5,6) 购买了房产 (A,B,C)。让我们将此组称为 G1,所以我想要一个表,将人员 1 到 6 链接到组 G1,并将属性 A 到 C 链接到 G1。
还可以找到以下其他组: 7 和 D,应链接到 G2 组
8、9和10这组人购买了E和F的属性。因此,这些应该链接到组G3。
一个结果应该给我们两个表,即:people_group 和 prop_Group。
people_group <- data.table(Person = c(1:10),
Group = c(rep("G1", 6), "G2", rep("G3", 3)))
prop_group <- data.table(Property = c("A", "B", "C", "D", "E", "F"),
Group = c(rep("G1", 3), "G2", rep("G3", 2)))
这也应该按周期完成,而不仅仅是2017。这在 tidyverse / data.table 中是否可行?
【问题讨论】:
-
你确定只有3组吗,从我的回答看来有4组。
-
确实有4组,因为9只与F相关。
标签: r dplyr data.table