楼主: 灯海
2466 3

[问答] R语言:如何在一定的规则下将数据转换为共现矩阵? [推广有奖]

  • 0关注
  • 0粉丝

大专生

66%

还不是VIP/贵宾

-

威望
0
论坛币
390 个
通用积分
2.9002
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
354 点
帖子
13
精华
0
在线时间
97 小时
注册时间
2017-8-5
最后登录
2022-11-17

楼主
灯海 学生认证  发表于 2020-4-6 11:44:40 |AI写论文
30论坛币
如下表数据,希望从左边的三列数据转换成右边的矩阵。规则是在同一个Item下如果Share-A+Share-B >0.05,那就构建A与B之间的关系,赋值为1. 如果有多个Item下Comp之间能构成联系则将赋值相加。然后自己与自己之间的关系(如A-A)赋值为0.

Item

Comp

Share

 

A

B

C

D

1

A

0.01

A0

0

1

2

1

B

0.02

B

0

0

1

1

1

C

0.05

C

1

1

0

1

1

D

0.04

D

2

1

1

0

2

A

0.03

2

D

0.02




然后目前能做到的步骤是通过Item构建Comp之间的关系,但不知道如何才能加入Share的规则进行赋值,以及将自身之间的关系赋值为0
以下是我目前能做的代码
outer_join <- merge(Mydata,Mydata, by='Item', all=TRUE)
table(outer_join$Comp.x, outer_join$Comp.y)

希望各位大神们不吝赐教!!!非常感谢

最佳答案

万人往LVR 查看完整内容

应该有直接的函数去处理,没有找到
关键词:数据转换 R语言 share item comp 求助 R语言 数据列转换成矩阵

沙发
万人往LVR 在职认证  发表于 2020-4-6 11:44:41
  1. library(tidyr)
  2. library(dplyr)
  3. library(rlist)

  4. dd <- data.frame(item=c(1,1,1,1,2,2),comp=c('A','B','C','D','A','D'),share=c(0.01,0.02,0.05,0.04,0.03,0.02))

  5. tmp <- merge(dd,dd,by='item')
  6. tmp[['value']] <- with(tmp,share.x+share.y) ##求和
  7. tmp[['value']] <- with(tmp,ifelse(comp.x!=comp.y&value>=0.05,1,0)) ##求和符合要求
  8. tmp %>% group_by(comp.x,comp.y) %>%
  9.         summarize(total_value = sum(value)) %>% #不同item多次符合要求
  10.         spread(comp.y,total_value) #整理成你要的样式
复制代码
应该有直接的函数去处理,没有找到



已有 1 人评分学术水平 热心指数 信用等级 收起 理由
灯海 + 5 + 5 + 5 精彩帖子

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

藤椅
灯海 学生认证  发表于 2020-4-6 15:22:17
万人往LVR 发表于 2020-4-6 14:02
应该有直接的函数去处理,没有找到
非常感谢解答!学习了!

板凳
灯海 学生认证  发表于 2020-4-6 16:39:06
万人往LVR 发表于 2020-4-6 11:44
应该有直接的函数去处理,没有找到

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-17 11:08