需要帮助重塑R上的数据吗
我正在寻找重塑此类数据集的方法:需要帮助重塑R上的数据吗,r,reshape,reshape2,R,Reshape,Reshape2,我正在寻找重塑此类数据集的方法: mydata<-data.frame(var=rep(c("A","B","C"),each=3),code=rep(c("x","y","z"),3),yearA=1:9,yearB=10:18,yearC=20:28) 为此: code year var.A var.B var.C x yearA 1 4 7 x yearB 10 13 16
mydata<-data.frame(var=rep(c("A","B","C"),each=3),code=rep(c("x","y","z"),3),yearA=1:9,yearB=10:18,yearC=20:28)
为此:
code year var.A var.B var.C
x yearA 1 4 7
x yearB 10 13 16
x yearC 20 23 26
y yearA 4 5 8
y yearB 13 14 17
y yearC 23 24 27
z yearA 3 6 9
z yearB 12 15 18
z yearC 22 25 28
我试着融化,然后重塑。。但结果不是我想要的。
有什么想法吗
thks库(重塑2)
mydata.meltlibrary(重塑2)
mydata.melt与Jot-eN的答案几乎相同,但在显示recast
可以做什么方面略有不同。请记住,人们通常不会这样做melt();重铸()
,因为后者包含前者
>mfoo<-melt(mydata)
>mfoo
var code variable value
1 A x yearA 1
2 A y yearA 2
3 A z yearA 3
4 B x yearA 4
5 B y yearA 5
6 B z yearA 6
7 C x yearA 7
8 C y yearA 8
9 C z yearA 9
10 A x yearB 10
11 A y yearB 11
12 A z yearB 12
13 B x yearB 13
14 B y yearB 14
15 B z yearB 15
16 C x yearB 16
17 C y yearB 17
18 C z yearB 18
19 A x yearC 20
20 A y yearC 21
21 A z yearC 22
22 B x yearC 23
23 B y yearC 24
24 B z yearC 25
25 C x yearC 26
26 C y yearC 27
27 C z yearC 28
>recast(mfoo,code+variable~var)
Using var, code, variable as id variables
$data
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 10 13 16
[3,] 20 23 26
[4,] 2 5 8
[5,] 11 14 17
[6,] 21 24 27
[7,] 3 6 9
[8,] 12 15 18
[9,] 22 25 28
$labels
$labels[[1]]
code variable
1 x yearA
2 x yearB
3 x yearC
4 y yearA
5 y yearB
6 y yearC
7 z yearA
8 z yearB
9 z yearC
$labels[[2]]
var
1 A
2 B
3 C
>mfoomfoo
var代码变量值
一年x一年
一年两次
3年
4 B x 1年A 4
5年
6b z yearA 6
7c x yearA 7
8年a 8
9年
10岁x 10岁
11年b 11
12 A z年b 12
13岁x 13岁
14年B 14
15 B z年B 15
16 C x yearB 16
17 C y年b 17
18 C z年B 18
19 A x yearC 20
20年c 21
21 A z年C 22
22 B x yearC 23
公元前23年公元前24年
24 B z年C 25
25岁x 26岁
26年鉴27
27年z年C 28
>重铸(mfoo,代码+变量~var)
使用var、code、variable作为id变量
$data
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 10 13 16
[3,] 20 23 26
[4,] 2 5 8
[5,] 11 14 17
[6,] 21 24 27
[7,] 3 6 9
[8,] 12 15 18
[9,] 22 25 28
$labels
$labels[[1]]
代码变量
一年一次
2年b
三年
4年a
5岁b
6年c
7 z年a
8年b
9年
$labels[[2]]
变量
1A
2 B
3 C
因此,您所要做的就是cbind
前两个列表元素。
不要气馁:melt
和recast
花些时间适应。我总是要重新教自己如何组织公式
,以获得所需的输出。几乎与Jot eN的答案相同,但略有不同,以显示重铸
可以做什么。请记住,人们通常不会这样做melt();重铸()
,因为后者包含前者
>mfoo<-melt(mydata)
>mfoo
var code variable value
1 A x yearA 1
2 A y yearA 2
3 A z yearA 3
4 B x yearA 4
5 B y yearA 5
6 B z yearA 6
7 C x yearA 7
8 C y yearA 8
9 C z yearA 9
10 A x yearB 10
11 A y yearB 11
12 A z yearB 12
13 B x yearB 13
14 B y yearB 14
15 B z yearB 15
16 C x yearB 16
17 C y yearB 17
18 C z yearB 18
19 A x yearC 20
20 A y yearC 21
21 A z yearC 22
22 B x yearC 23
23 B y yearC 24
24 B z yearC 25
25 C x yearC 26
26 C y yearC 27
27 C z yearC 28
>recast(mfoo,code+variable~var)
Using var, code, variable as id variables
$data
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 10 13 16
[3,] 20 23 26
[4,] 2 5 8
[5,] 11 14 17
[6,] 21 24 27
[7,] 3 6 9
[8,] 12 15 18
[9,] 22 25 28
$labels
$labels[[1]]
code variable
1 x yearA
2 x yearB
3 x yearC
4 y yearA
5 y yearB
6 y yearC
7 z yearA
8 z yearB
9 z yearC
$labels[[2]]
var
1 A
2 B
3 C
>mfoomfoo
var代码变量值
一年x一年
一年两次
3年
4 B x 1年A 4
5年
6b z yearA 6
7c x yearA 7
8年a 8
9年
10岁x 10岁
11年b 11
12 A z年b 12
13岁x 13岁
14年B 14
15 B z年B 15
16 C x yearB 16
17 C y年b 17
18 C z年B 18
19 A x yearC 20
20年c 21
21 A z年C 22
22 B x yearC 23
公元前23年公元前24年
24 B z年C 25
25岁x 26岁
26年鉴27
27年z年C 28
>重铸(mfoo,代码+变量~var)
使用var、code、variable作为id变量
$data
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 10 13 16
[3,] 20 23 26
[4,] 2 5 8
[5,] 11 14 17
[6,] 21 24 27
[7,] 3 6 9
[8,] 12 15 18
[9,] 22 25 28
$labels
$labels[[1]]
代码变量
一年一次
2年b
三年
4年a
5岁b
6年c
7 z年a
8年b
9年
$labels[[2]]
变量
1A
2 B
3 C
因此,您所要做的就是cbind
前两个列表元素。
不要气馁:melt
和recast
花些时间适应。我总是要重新教自己如何组织公式
,以获得所需的输出。这里是另一个解决方案,Hadley的新tidyr(是重塑2的替代和部分替代品)
library(“tidyr”)
图书馆(“dplyr”)
mydata%
聚集(年份、值、年份a:yearC)%>%
变异(var=0(“var”,“,”,var))%>%
价差(风险值、价值)
这里是另一个解决方案,使用哈德利新的tidyr(部分替代重塑2)软件包
library(“tidyr”)
图书馆(“dplyr”)
mydata%
聚集(年份、值、年份a:yearC)%>%
变异(var=0(“var”,“,”,var))%>%
价差(风险值、价值)
这是笨重的底座
R重塑:
d <- read.table(text='var code yearA yearB yearC
A x 1 10 20
A y 2 11 21
A z 3 12 22
B x 4 13 23
B y 5 14 24
B z 6 15 25
C x 7 16 26
C y 8 17 27
C z 9 18 28', header=TRUE, stringsAsFactors=FALSE)
long <- reshape(d, dir='long', varying=list(3:5), idvar=c('code', 'var'),
timevar='year', v.names='v', times=c('A', 'B', 'C'))
reshape(long, idvar=c('code', 'year'), timevar='var')
# code year v.A v.B v.C
# x.A.A x A 1 4 7
# y.A.A y A 2 5 8
# z.A.A z A 3 6 9
# x.A.B x B 10 13 16
# y.A.B y B 11 14 17
# z.A.B z B 12 15 18
# x.A.C x C 20 23 26
# y.A.C y C 21 24 27
# z.A.C z C 22 25 28
d这是笨重的base
R重塑:
d <- read.table(text='var code yearA yearB yearC
A x 1 10 20
A y 2 11 21
A z 3 12 22
B x 4 13 23
B y 5 14 24
B z 6 15 25
C x 7 16 26
C y 8 17 27
C z 9 18 28', header=TRUE, stringsAsFactors=FALSE)
long <- reshape(d, dir='long', varying=list(3:5), idvar=c('code', 'var'),
timevar='year', v.names='v', times=c('A', 'B', 'C'))
reshape(long, idvar=c('code', 'year'), timevar='var')
# code year v.A v.B v.C
# x.A.A x A 1 4 7
# y.A.A y A 2 5 8
# z.A.A z A 3 6 9
# x.A.B x B 10 13 16
# y.A.B y B 11 14 17
# z.A.B z B 12 15 18
# x.A.C x C 20 23 26
# y.A.C y C 21 24 27
# z.A.C z C 22 25 28
我不明白这个答案。为什么不直接重铸(mydata,code+variable~var)
?看起来您使用的是稍旧版本的“重塑2”,因为较新版本会自动组合数据和标签。@AnandaMahto如果我没有预先添加咖啡因,我会这样做:-)。我故意显示了melt
的输出,希望能为OP提供更多的澄清。我不明白这个答案。为什么不直接重铸(mydata,code+variable~var)
?看起来您使用的是稍旧版本的“重塑2”,因为较新版本会自动组合数据和标签。@AnandaMahto如果我没有预先添加咖啡因,我会这样做:-)。我特意显示了melt
的输出,希望能向OP提供更多的说明。是否可以使用SQL完成此任务?是否可以使用SQL完成此任务?
d <- read.table(text='var code yearA yearB yearC
A x 1 10 20
A y 2 11 21
A z 3 12 22
B x 4 13 23
B y 5 14 24
B z 6 15 25
C x 7 16 26
C y 8 17 27
C z 9 18 28', header=TRUE, stringsAsFactors=FALSE)
long <- reshape(d, dir='long', varying=list(3:5), idvar=c('code', 'var'),
timevar='year', v.names='v', times=c('A', 'B', 'C'))
reshape(long, idvar=c('code', 'year'), timevar='var')
# code year v.A v.B v.C
# x.A.A x A 1 4 7
# y.A.A y A 2 5 8
# z.A.A z A 3 6 9
# x.A.B x B 10 13 16
# y.A.B y B 11 14 17
# z.A.B z B 12 15 18
# x.A.C x C 20 23 26
# y.A.C y C 21 24 27
# z.A.C z C 22 25 28