r - 如何基于另一个对称数据框在 R 中创建对称数据框
问题描述
我有这个数据框。
df <- data.frame(product=c("A", "B", "C", "D", "E"), ID=c(1,1,2,2,1))
和另一个(对称)数据帧。
ID_table <- data.frame("ID 1" = c(10, 50), "ID 2" = c(50, 10))
如何根据 ID 的值创建 5 x 5 的产品级数据框?
这是所需的输出:
从 A 到 B 的数字是 10,因为 A 和 B 具有相同的 ID=1。从 A 到 C 的数字是 50,因为 A 的 ID 为 1,而 C 的 ID 为 2。
解决方案
您可以使用table
andtcrossprod
获得以下内容
out <- tcrossprod(table(df))
out
# product
#product A B C D E
# A 1 1 0 0 1
# B 1 1 0 0 1
# C 0 0 1 1 0
# D 0 0 1 1 0
# E 1 1 0 0 1
现在您只需要将值替换为10
and50
as.data.frame(ifelse(out == 1, 10, 50))
# A B C D E
#A 10 10 50 50 10
#B 10 10 50 50 10
#C 50 50 10 10 50
#D 50 50 10 10 50
#E 10 10 50 50 10
结果table(df)
是
table(df)
# ID
#product 1 2
# A 1 0
# B 1 0
# C 0 1
# D 0 1
# E 1 0
虽然结果和tcrossprod(table(df))
做的一样
table(df) %*% t(table(df))
推荐阅读
- java - 在elasticsearch java api中返回分析的非存储文本字段的子字符串
- javascript - “你不应该在外面使用
“ 生产中的错误,但在开发中它可以正常工作 - reactjs - 在图表的轴上隐藏数字
- css - 使用 Bootstrap 设置样式时,单选按钮不显示选中状态
- swift - 如何声明泛型基类?
- qml - QML 矩形对象出现在错误的位置
- mongoose - 获取 Mongoose 字段的数据类型
- json - 将 pipeline_pb2.TrainEvalPipelineConfig 转换为 JSON 或 YAML 文件以用于 TensorFlow 对象检测 API
- sctp - SCTP 流和消息 - 我可以同时拥有吗?
- c# - 在 C# 中创建非常大的边和顶点图