R 数据操作:收集还是传播,还是两者兼而有之?

R 数据操作:收集还是传播,还是两者兼而有之?,r,dplyr,R,Dplyr,我试图改变我的数据框,这样我就可以用一些不同的图来观察它。基本上我想比较不同的模型。这就是我所拥有的: variable = c('A','B','C','A','B','C') optimal = c(10,20,30,40,80,100) control = c(15,15,15,15,15,15) method_1 = c(11,22,28,44,85,95) method_2 = c(9, 19,31,39,79,102) df = data.frame(variable, optim

我试图改变我的数据框,这样我就可以用一些不同的图来观察它。基本上我想比较不同的模型。这就是我所拥有的:

variable = c('A','B','C','A','B','C')
optimal = c(10,20,30,40,80,100)
control = c(15,15,15,15,15,15)
method_1 = c(11,22,28,44,85,95)
method_2 = c(9, 19,31,39,79,102)

df = data.frame(variable, optimal, control, method_1, method_2)
df
所以看起来是这样的:

  variable optimal control method_1 method_2
1        A      10      15       11        9
2        B      20      15       22       19
3        C      30      15       28       31
4        A      40      15       44       39
5        B      80      15       85       79
6        C     100      15       95      102
  variable  A  B   C
1  optimal 10 20  30
2  optimal 40 80 100
3  control 15 15  15
4  control 15 15  15
5 method_1 11 22  28
6 method_1 44 85  95
7 method_2  9 19  31
8 method_2 39 79 102
我需要这样的东西:

  variable optimal control method_1 method_2
1        A      10      15       11        9
2        B      20      15       22       19
3        C      30      15       28       31
4        A      40      15       44       39
5        B      80      15       85       79
6        C     100      15       95      102
  variable  A  B   C
1  optimal 10 20  30
2  optimal 40 80 100
3  control 15 15  15
4  control 15 15  15
5 method_1 11 22  28
6 method_1 44 85  95
7 method_2  9 19  31
8 method_2 39 79 102

我尝试过收集、传播和转置,但都没有效果。有什么想法吗?我觉得这应该是一个很容易的解决办法,但我无法让我的头周围。提前谢谢。

我想你们两个都需要。还要注意的是,“聚集和分散”已被取消,取而代之的是“较长的轴”和“较宽的轴”


你必须先走长路,然后走宽路,也就是说

library(dplyr)
library(tidyr)

df %>% 
 pivot_longer(-1) %>% 
 pivot_wider(names_from = variable, values_from = value) %>% 
 unnest()

name         A     B     C
  <chr>    <dbl> <dbl> <dbl>
1 optimal     10    20    30
2 optimal     40    80   100
3 control     15    15    15
4 control     15    15    15
5 method_1    11    22    28
6 method_1    44    85    95
7 method_2     9    19    31
8 method_2    39    79   102

具体来说,您尝试过什么?您还可以使用data.table中的melt和dcast,如下所示:librarydata.table;meltas.data.tabledf,variable,variable.name=Var[,dcast.SD,Var+rowidvariable~variable]。非常好。要消除最不安全的警告,请使用unnestcols=everything