Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要帮助重塑R上的数据吗_R_Reshape_Reshape2 - Fatal编程技术网

需要帮助重塑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.melt
library(重塑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