在R中使用具有不均匀长度变量的熔体/铸造

Jon*_*Jon 4 casting r reshape melt

我正在使用我想要转动的大型数据框,以便列中的变量成为顶部的行.

我发现reshape包在这种情况下非常有用,除了cast函数默认为fun.aggregate = length.据推测,这是因为我通过"案例"执行这些操作,并且测量的变量数量因案例而异.

我想转动,以便在转动的数据框中将缺失的变量表示为"NA".

所以,换句话说,我想从像这样的熔融数据框架:

Case | Variable | Value
 1         1        2.3
 1         2        2.1
 1         3        1.3
 2         1        4.3
 2         2        2.5
 3         1        1.8
 3         2        1.9
 3         3        2.3
 3         4        2.2
Run Code Online (Sandbox Code Playgroud)

对于这样的事情:

Case | Variable 1 | Variable 2 | Variable 3 | Variable 4
 1         2.3          2.1          1.3         NA
 2         4.3          2.5          NA          NA
 3         1.8          1.9          2.3         2.2 
Run Code Online (Sandbox Code Playgroud)

代码dcast(data,... ~Variable)再次默认为fun.aggregate = length,它不保留原始值.

感谢您的帮助,如果有任何不清楚的地方,请告诉我!

小智 5

只需在cast调用中包含所有变量即可.重塑期望Value调用列value,因此它会抛出警告,但仍然可以正常工作.它使用的原因fun.aggregate=length是因为Case公式中缺少.它汇总了价值观Case.

尝试: cast(data, Case~Variable)

data <- data.frame(Case=c(1,1,1,2,2,3,3,3,3),
  Variable=c(1,2,3,1,2,1,2,3,4),
  Value=c(2.3,2.1,1.3,4.3,2.5,1.8,1.9,2.3,2.2))

cast(data,Case~Variable)
Using Value as value column.  Use the value argument to cast to override this choice
  Case   1   2   3   4
1    1 2.3 2.1 1.3  NA
2    2 4.3 2.5  NA  NA
3    3 1.8 1.9 2.3 2.2
Run Code Online (Sandbox Code Playgroud)

编辑:作为对@Jon评论的回应.如果数据框中还有一个变量,你会怎么做?

data <- data.frame(expt=c(1,1,1,1,2,2,2,2,2),
               func=c(1,1,1,2,2,3,3,3,3),
               variable=c(1,2,3,1,2,1,2,3,4),
               value=c(2.3,2.1,1.3,4.3,2.5,1.8,1.9,2.3,2.2))

cast(data,expt+variable~func)
  expt variable   1   2   3
1    1        1 2.3 4.3  NA
2    1        2 2.1  NA  NA
3    1        3 1.3  NA  NA
4    2        1  NA  NA 1.8
5    2        2  NA 2.5 1.9
6    2        3  NA  NA 2.3
7    2        4  NA  NA 2.2
Run Code Online (Sandbox Code Playgroud)