楼主: 蓝色
7590 12

[学习分享] R怎么能把wide的数据变成long的数据【已经解决】 [推广有奖]

贵宾

已卖:4066份资源

泰斗

34%

还不是VIP/贵宾

-

TA的文库  其他...

统计软件和图书资源

Stata FAQ and Econometrics

威望
13
论坛币
1100116 个
通用积分
78894.5318
学术水平
3454 点
热心指数
3913 点
信用等级
2749 点
经验
472847 点
帖子
11699
精华
5
在线时间
20307 小时
注册时间
2004-7-15
最后登录
2025-12-28

初级热心勋章 初级信用勋章 初级学术勋章 中级学术勋章 中级热心勋章 中级信用勋章 高级热心勋章 高级信用勋章

楼主
蓝色 发表于 2015-2-16 19:43:11 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
如下面的数据是wide数据
wide <- data.frame(id  = rep(1:8),
                 x1990 = rnorm(4), x2000 = rnorm(4),
                 y1990 = runif(4), y2000 = rnorm(4),
                 age=runif(4))
wide

> wide
  id      x1990      x2000     y1990      y2000       age
1  1 -0.3391266  0.2116209 0.9651395  0.5107261 0.6414690
2  2  0.6105478 -0.8521457 0.2798804  0.7340399 0.4104719
3  3 -0.8593098  1.2534132 0.5698498 -0.7069206 0.7748600
4  4  1.2901323 -0.5807881 0.3347142  0.2247963 0.9009608
5  5 -0.3391266  0.2116209 0.9651395  0.5107261 0.6414690
6  6  0.6105478 -0.8521457 0.2798804  0.7340399 0.4104719
7  7 -0.8593098  1.2534132 0.5698498 -0.7069206 0.7748600
8  8  1.2901323 -0.5807881 0.3347142  0.2247963 0.9009608


如何变成long格式数据
id  year   x  y  age
1  1990
1  2000


2  1990
2  2000

[size=13.63636302948px]

[size=13.63636302948px]

[size=13.63636302948px]




谢谢

解决方法
  1. rm(list=ls())

  2. wide <- data.frame(id  = rep(1:8),
  3.                    x1990 = round(rnorm(4),2),
  4.                    x2000 = round(rnorm(4),2),
  5.                    y1990 = round(runif(4),2),
  6.                    y2000 = round(runif(4),2),
  7.                    age=seq(from = 35, to = 70, by = 5))
  8. wide

  9. long <- reshape(wide, idvar = "id",
  10.                 varying = c("x1990", "x2000", "y1990", "y2000"),
  11.                 timevar = "year",
  12.                 times = c(1990, 2000),
  13.                 v.names = c("x", "y"),
  14.                 direction = "long")
  15. long
复制代码

不过显然R这个的不如stata的reshape方便


二维码

扫码加我 拉你入群

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

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

关键词:long 已经解决 wide IDE wid

本帖被以下文库推荐

沙发
soccy 发表于 2015-2-16 20:00:03
tidy保就是干这个的。

藤椅
soccy 发表于 2015-2-16 20:00:59
tidyr包。

板凳
jiangbeilu 学生认证  发表于 2015-2-16 21:40:50
使用reshape 包
  1. library(reshape)
  2. data1<-melt(wide,id=c("id","age"))
  3. data1$xory<-substr(data1$variable,1,1)
  4. data1$year<-as.numeric(substr(data1$variable,2,5))
  5. data1$variable<-NULL
  6. cast(data1,id+age+year~xory)
复制代码
已有 1 人评分经验 论坛币 收起 理由
李会超 + 20 + 10 观点有启发

总评分: 经验 + 20  论坛币 + 10   查看全部评分

报纸
Nicolle 学生认证  发表于 2015-2-17 03:54:13
提示: 作者被禁止或删除 内容自动屏蔽

地板
蓝色 发表于 2015-2-17 06:52:11
Nicolle 发表于 2015-2-17 03:54
谢谢,我研究研究

7
蓝色 发表于 2015-2-17 06:52:50
jiangbeilu 发表于 2015-2-16 21:40
使用reshape 包
谢谢,学习一下

8
蓝色 发表于 2015-2-17 06:52:50
jiangbeilu 发表于 2015-2-16 21:40
使用reshape 包
谢谢,学习一下

9
蓝色 发表于 2015-2-17 06:53:40
soccy 发表于 2015-2-16 20:00
tidy保就是干这个的。
谢谢提示

10
蓝色 发表于 2015-2-17 06:55:08
soccy 发表于 2015-2-16 20:00
tidy保就是干这个的。
谢谢提示

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

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