楼主: yijiaobani
7323 6

[问答] R语言中,用melt进行数据融合,怎么对这个过程求逆 [推广有奖]

  • 4关注
  • 5粉丝

已卖:70份资源

博士生

26%

还不是VIP/贵宾

-

威望
0
论坛币
196 个
通用积分
10.7311
学术水平
2 点
热心指数
8 点
信用等级
0 点
经验
5127 点
帖子
147
精华
0
在线时间
236 小时
注册时间
2015-5-18
最后登录
2020-10-28

楼主
yijiaobani 发表于 2016-9-26 19:27:26 |AI写论文
5论坛币
大家好,我问一个问题,我的数据比较多,先用个简单的代码来描述我的需求:
  1. a <- data.frame(num=c(1,2,3),
  2.                 ani=c("a","b","c")
  3.                 ,dam= c("x","y","z"),
  4.                 b1=c(33,44,66),
  5.                 b2=c(44,33,22),
  6.                 b3=c(45,33,55),
  7.                 b4=c(55,66,77))
  8. a #查看数据
  9. b <- melt(a,id.vars=c("num","ani","dam"))
  10. b
复制代码
得到的结果如下:
  1. > a <- data.frame(num=c(1,2,3),
  2. + ani=c("a","b","c")
  3. + ,dam= c("x","y","z"),
  4. + b1=c(33,44,66),
  5. + b2=c(44,33,22),
  6. + b3=c(45,33,55),
  7. + b4=c(55,66,77))
  8. > a #查看数据
  9.   num ani dam b1 b2 b3 b4
  10. 1   1   a   x 33 44 45 55
  11. 2   2   b   y 44 33 33 66
  12. 3   3   c   z 66 22 55 77
  13. > b <- melt(a,id.vars=c("num","ani","dam"))
  14. > b
  15.    num ani dam variable value
  16. 1    1   a   x       b1    33
  17. 2    2   b   y       b1    44
  18. 3    3   c   z       b1    66
  19. 4    1   a   x       b2    44
  20. 5    2   b   y       b2    33
  21. 6    3   c   z       b2    22
  22. 7    1   a   x       b3    45
  23. 8    2   b   y       b3    33
  24. 9    3   c   z       b3    55
  25. 10   1   a   x       b4    55
  26. 11   2   b   y       b4    66
  27. 12   3   c   z       b4    77
复制代码
我的问题,怎么由对象b,得到对象a

十分感谢。



最佳答案

不懂不装懂 查看完整内容

> library(reshape2) > a a num ani dam b1 b2 b3 b4 1 1 a x 33 44 45 55 2 2 b y 44 33 33 66 3 3 c z 66 22 55 77 > b b num ani dam variable value 1 1 a x b1 33 2 2 b y b1 44 3 3 c z b1 66 4 1 a x b2 44 5 2 b y b2 33 6 3 c z b2 22 7 1 a x b3 45 8 2 ...
关键词:ELT R语言 Variable value 数据比较
<img src="stati ...

沙发
不懂不装懂 发表于 2016-9-26 19:27:27
> library(reshape2)
> a <- data.frame(num=c(1,2,3),
+                 ani=c("a","b","c")
+                 ,dam= c("x","y","z"),
+                 b1=c(33,44,66),
+                 b2=c(44,33,22),
+                 b3=c(45,33,55),
+                 b4=c(55,66,77))
> a
  num ani dam b1 b2 b3 b4
1   1   a   x 33 44 45 55
2   2   b   y 44 33 33 66
3   3   c   z 66 22 55 77
> b <- melt(a,id=c("num","ani","dam"))
> b
   num ani dam variable value
1    1   a   x       b1    33
2    2   b   y       b1    44
3    3   c   z       b1    66
4    1   a   x       b2    44
5    2   b   y       b2    33
6    3   c   z       b2    22
7    1   a   x       b3    45
8    2   b   y       b3    33
9    3   c   z       b3    55
10   1   a   x       b4    55
11   2   b   y       b4    66
12   3   c   z       b4    77
> a1<-dcast(b,num+ani+dam~variable)
> a1
  num ani dam b1 b2 b3 b4
1   1   a   x 33 44 45 55
2   2   b   y 44 33 33 66
3   3   c   z 66 22 55 77
已有 1 人评分论坛币 热心指数 收起 理由
admin_kefu + 30 + 5 热心帮助其他会员

总评分: 论坛币 + 30  热心指数 + 5   查看全部评分

藤椅
万人往LVR 在职认证  发表于 2016-9-26 20:07:16
tidyr::spread

板凳
johnmy 发表于 2016-9-26 20:08:02
dcast()

报纸
johnmy 发表于 2016-9-26 20:09:48
万人往LVR 发表于 2016-9-26 20:07
tidyr::spread
这个更好

地板
yijiaobani 发表于 2016-9-26 21:12:54
不懂不装懂 发表于 2016-9-26 19:27
> library(reshape2)
> a  a
  num ani dam b1 b2 b3 b4
thank you,记得有这个函数,具体忘了,多谢解答

7
ryoeng 在职认证  发表于 2016-10-2 20:00:23
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽

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

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