如何将数据转换成合适的表来计算R中的单链接聚类
我试图用二进制代码将一些数据转换成数据表(稍后用于集群)。我得到的数据如下所示:如何将数据转换成合适的表来计算R中的单链接聚类,r,binary,transform,R,Binary,Transform,我试图用二进制代码将一些数据转换成数据表(稍后用于集群)。我得到的数据如下所示: order_number product_id 34 37552 5 24852 10 24852 15 33290 7 23586 35 22395
order_number product_id
34 37552
5 24852
10 24852
15 33290
7 23586
35 22395
4 16766
33 46393
9 12916
61 12341
我想要得到的是列order\u number,它看起来像一个行标题,然后根据product\u id中的某个产品是否在order\u number单元格中粘贴0或1。所以订单号应该像一个篮子。我希望它看起来像这样:
order_number
product_id 34 5
37552 1 0
24852 0 1
24852 0 1
有人知道怎么做吗?任何帮助都将不胜感激,我被卡住了 一张简单的
表格如何
> table(df$product_id, df$order_number, dnn=c("Product ID","Order Number"))
## Order Number
## Product ID 4 5 7 9 10 15 33 34 35 61
## 12341 0 0 0 0 0 0 0 0 0 1
## 12916 0 0 0 1 0 0 0 0 0 0
## 16766 1 0 0 0 0 0 0 0 0 0
## 22395 0 0 0 0 0 0 0 0 1 0
## 23586 0 0 1 0 0 0 0 0 0 0
## 24852 0 1 0 0 1 0 0 0 0 0
## 33290 0 0 0 0 0 1 0 0 0 0
## 37552 0 0 0 0 0 0 0 1 0 0
## 46393 0 0 0 0 0 0 1 0 0 0
我不确定您为什么需要产品id的副本,但这将为您提供您在问题中提出的确切的所需输出;然而,它不是干净的,因为期望的输出有点奇怪
df.out <- df.org
df.out[as.character(df.out$order_number)] <- 0
df.out <- rbind(df.out ,c("NA", "NA",df.out$product_id))
for (i in 1:(nrow(df.out)-1)){
for(j in 3:ncol(df.out)){
df.out[i,j] <- ifelse(df.out[11,j]==df.out[i,2],1,df.out[i,j])
}
}
df.out <- df.out[-11,-1]
df.out
# product_id 34 5 10 15 7 35 4 33 9 61
# 1 37552 1 0 0 0 0 0 0 0 0 0
# 2 24852 0 1 1 0 0 0 0 0 0 0
# 3 24852 0 1 1 0 0 0 0 0 0 0
# 4 33290 0 0 0 1 0 0 0 0 0 0
# 5 23586 0 0 0 0 1 0 0 0 0 0
# 6 22395 0 0 0 0 0 1 0 0 0 0
# 7 16766 0 0 0 0 0 0 1 0 0 0
# 8 46393 0 0 0 0 0 0 0 1 0 0
# 9 12916 0 0 0 0 0 0 0 0 1 0
# 10 12341 0 0 0 0 0 0 0 0 0 1
df.out我喜欢这个解决方案,但OP(出于某种原因!)希望在产品ID
列中有重复项。你说得对!是的,我也看不出原因,但你的回答符合OP的要求。不管怎样,没关系。这是一个很好的解决方案,希望能帮助其他人,如果不是OP,他/她自己+1我认为这是必要的想法是错误的,但我找到了更合适的方法来对数据进行聚类。无论如何,非常感谢!
df.org <- structure(list(order_number = c(34L, 5L, 10L, 15L, 7L, 35L, 4L,
33L, 9L, 61L), product_id = c(37552L, 24852L, 24852L, 33290L,
23586L, 22395L, 16766L, 46393L, 12916L, 12341L)), .Names = c("order_number",
"product_id"), class = "data.frame", row.names = c(NA, -10L))