楼主: danbaidong
17508 5

[有偿编程] R语言如何把矩阵变成向量? [推广有奖]

  • 6关注
  • 7粉丝

已卖:1468份资源

副教授

23%

还不是VIP/贵宾

-

威望
0
论坛币
34755 个
通用积分
16.7446
学术水平
9 点
热心指数
26 点
信用等级
7 点
经验
67874 点
帖子
297
精华
0
在线时间
1067 小时
注册时间
2007-5-26
最后登录
2025-11-1

楼主
danbaidong 学生认证  发表于 2017-10-9 17:00:51 |AI写论文
10论坛币
现在有如下格式的数据:

D1D2D3D4
O1

7

3

9

3

O2

7

2

8

2

O3

2

0

2

10

想变成下面的格式:
fromtoflow
O1D1

7

O2D1

7

O3D1

2

O1D2

3

O2D2

2

O3D2

0

O1D3

9

O2D3

8

O3D3

2

O1D4

3

O2D4

2

O3D4

10

不知道用R语言应该如何实现呢?一个格子一个格子操作的话,速度太慢了。好像可以用apply族函数?
求有经验的朋友指点,谢谢!


关键词:R语言 apply 如何实现 appl From

沙发
Whig 在职认证  发表于 2017-10-9 18:04:53
reshape2包的melt函数

藤椅
屋檐滴语 发表于 2017-10-9 20:41:50
tidyr很方便。
注:tidyr是reshape2的加强升级版。

板凳
屋檐滴语 发表于 2017-10-9 20:52:26
复制代码
library(tidyr)
from=c("O1","O2","O3")
D1=c(7,7,2)
D2=c(3,2,0)
D3=c(9,8,2)
D4=c(3,2,10)
df=data.frame(from,D1,D2,D3,D4)
df %>%
  gather(to,flow,-from)

报纸
屋檐滴语 发表于 2017-10-9 20:56:47
  1. library(tidyr)
  2. from=c("O1","O2","O3")
  3. D1=c(7,7,2)
  4. D2=c(3,2,0)
  5. D3=c(9,8,2)
  6. D4=c(3,2,10)
  7. df=data.frame(from,D1,D2,D3,D4)
  8. df %>%
  9.   gather(to,flow,-from)
复制代码

地板
yijiaobani 发表于 2017-11-15 11:28:53
用reshape也挺简单的:
  1. from=c("O1","O2","O3")
  2. D1=c(7,7,2)
  3. D2=c(3,2,0)
  4. D3=c(9,8,2)
  5. D4=c(3,2,10)
  6. df=data.frame(from,D1,D2,D3,D4)
  7. df

  8. library(reshape)
  9. melt(df)
复制代码


结果:
  1. > melt(df)
  2. Using from as id variables
  3.    from variable value
  4. 1    O1       D1     7
  5. 2    O2       D1     7
  6. 3    O3       D1     2
  7. 4    O1       D2     3
  8. 5    O2       D2     2
  9. 6    O3       D2     0
  10. 7    O1       D3     9
  11. 8    O2       D3     8
  12. 9    O3       D3     2
  13. 10   O1       D4     3
  14. 11   O2       D4     2
  15. 12   O3       D4    10
复制代码

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 22:35