楼主: dzzsa
1249 7

[问答] 数据转矩阵求助~ [推广有奖]

  • 0关注
  • 0粉丝

初中生

19%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
112 点
帖子
6
精华
0
在线时间
16 小时
注册时间
2015-4-7
最后登录
2016-10-12

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

如题,有abcde五个变量,知道他们的关系是

  

变量

  

变量

关系

a

c

1

b

e

1

c

d

1

d

e

1

怎么能转成矩阵形式,即

  

  

a

b

c

d

e

a

1

b

1

c

1

1

d

1

1

e

1

1

空白可以有0,可以空着。因为数据量特别大,每年的数据要做一个矩阵,不可能手工做,有没有大神点拨一下,多谢~

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:ABCD 有没有 CDE DEA ABC 手工

沙发
hugebear 发表于 2015-4-19 22:49:15 |只看作者 |坛友微信交流群
思路是用table函数。首先要根据你的“关系”变量整理出两个因子来。
  1. f1 <- factor(c('a', 'b', 'c', 'd'), levels = letters[1:5])
  2. f2 <- factor(c('c', 'e', 'd', 'e'), levels = letters[1:5])
  3. x <- table(f1, f2)
  4. output <- x + t(x)  # 将x转成对称矩阵,得到你想要的输出。
复制代码
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
ywh19860616 + 1 + 1 + 1 精彩帖子
admin_kefu + 15 热心帮助其他会员

总评分: 论坛币 + 15  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

藤椅
dzzsa 发表于 2015-4-19 23:35:27 |只看作者 |坛友微信交流群
hugebear 发表于 2015-4-19 22:49
思路是用table函数。首先要根据你的“关系”变量整理出两个因子来。
请问如果有200个变量,也是这么做吗

使用道具

板凳
hugebear 发表于 2015-4-20 00:12:53 |只看作者 |坛友微信交流群
dzzsa 发表于 2015-4-19 23:35
请问如果有200个变量,也是这么做吗
请把你的数据贴出来看看。

使用道具

报纸
dzzsa 发表于 2015-4-20 00:55:14 |只看作者 |坛友微信交流群


请见附件excel表格,sheet 1 中是两个变量之间存在的关系,sheet 2 中是45个变量。现在用sheet 2 中的变量做一个45*45的矩阵,然后根据sheet 1 中的关系进行赋值,有关系的赋值为1,没有的赋值为0。请问可以实现吗。万分感谢~

data.xlsx

9.9 MB

使用道具

地板
dzzsa 发表于 2015-4-20 00:59:44 |只看作者 |坛友微信交流群
hugebear 发表于 2015-4-20 00:12
请把你的数据贴出来看看。
见楼上~

使用道具

7
hugebear 发表于 2015-4-20 01:31:41 |只看作者 |坛友微信交流群
dzzsa 发表于 2015-4-20 00:59
见楼上~
可以做的。就按我上面写的一样操作。另外提醒: 使用术语的名称应该规范,sheet1里面的stateA和stateB可以称为“变量”(更确切的,“因子(factor)变量”)。sheet2里面的ccode本身是一个变量,将它的元素2,40, ..., 800称为“变量”就不再合适了,应该称之为“水平(levels)”。
你仔细研究一下我之前的代码,恰当地将stateA和stateB根据ccode转换为因子变量,然后使用table函数,就可以做了。下面的代码供你参考(建议你自己先尝试再对照):
  1. attach(sheet1)
  2. attach(sheet2)
  3. stateA <- factor(stateA, levels = ccode)
  4. stateB <- factor(stateB, levels = ccode)
  5. x <- table(stateA, stateB)
  6. output <- x + t(x)
  7. output[output > 0] <- 1 # output中某些位置的值大于1, 根据你的需要一律都置为1.
  8. detach()
  9. detach()
复制代码
P.S.:你的原始数据集没必要那么大(区区几十个数据占用不了10M的空间),你储存了很多冗余的空行,可以清除之。

使用道具

8
dzzsa 发表于 2015-4-20 02:28:47 |只看作者 |坛友微信交流群
hugebear 发表于 2015-4-20 01:31
可以做的。就按我上面写的一样操作。另外提醒: 使用术语的名称应该规范,sheet1里面的stateA和stateB可以 ...
好的,我试一试,太感谢了!!!

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 06:30