重新格式化R数据帧中的数据集



我清理了我执行的模拟的文本输出。我用R生成了一个数据框架,其中包含19个类似的数据集,它们像这样垂直堆叠:

Data set 1
Data set 2
.
.
Data set 19

每个数据集有260行和4列数据,格式如下:

A F 124 241
.
.
D Q 748 854

由于每个数据集在列1 &2、包含19个数据集的整个数据框架有这样的形式:

A F 124 241
.
.
D Q 748 856
A F 068 937
.
.
D Q 300 099
.
.
.
A F 175 235
.
.
D Q 725 893

我想弄清楚如何将数据集横向堆叠。自列1 &2对于所有19个数据集都是相同的,从第二个数据集开始,我只想提取列3 & &;创建一个布局如下的数据帧:

A F 124 241 068 937 . . . 175 235
.
.
D Q 748 856 300 099 . . . 725 893

因为我从数据集#1中提取了4列,而从数据集#2到#19中只提取了2列,所以新的数据框架将有40列260行。

如果你有关于如何重新格式化这个数据框架的技巧,请让我知道。谢谢你!欢呼,Di

下面是一个例子:

library(dplyr)
library(tidyr)
tmp <- data.frame(
id1 = rep(LETTERS[1:13], 19), 
id2 = rep(LETTERS[14:26], 19), 
c1 = seq(1, 19*13, by=1), 
c2 = seq(19*13, 1, by=-1) 
)

在您的数据集中,您必须添加一个数据集编号变量。因为每个数据集有13行,所以我这样做:

tmp <- tmp %>% 
mutate(ds = rep(1:19, each=13)) 

然后,您可以使用tidyr包中的pivot_wider()以所需的方式重塑您的数据。

tmp <- tmp %>% 
pivot_wider(names_from = ds, values_from = c("c1", "c2"))
tmp
# # A tibble: 13 x 40
#   id1   id2    c1_1  c1_2  c1_3  c1_4  c1_5  c1_6  c1_7  c1_8  c1_9 c1_10 c1_11 c1_12 c1_13 c1_14 c1_15 c1_16 c1_17 c1_18
#   <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 A     N         1    14    27    40    53    66    79    92   105   118   131   144   157   170   183   196   209   222
# 2 B     O         2    15    28    41    54    67    80    93   106   119   132   145   158   171   184   197   210   223
# 3 C     P         3    16    29    42    55    68    81    94   107   120   133   146   159   172   185   198   211   224
# 4 D     Q         4    17    30    43    56    69    82    95   108   121   134   147   160   173   186   199   212   225
# 5 E     R         5    18    31    44    57    70    83    96   109   122   135   148   161   174   187   200   213   226
# 6 F     S         6    19    32    45    58    71    84    97   110   123   136   149   162   175   188   201   214   227
# 7 G     T         7    20    33    46    59    72    85    98   111   124   137   150   163   176   189   202   215   228
# 8 H     U         8    21    34    47    60    73    86    99   112   125   138   151   164   177   190   203   216   229
# 9 I     V         9    22    35    48    61    74    87   100   113   126   139   152   165   178   191   204   217   230
# 10 J     W        10    23    36    49    62    75    88   101   114   127   140   153   166   179   192   205   218   231
# 11 K     X        11    24    37    50    63    76    89   102   115   128   141   154   167   180   193   206   219   232
# 12 L     Y        12    25    38    51    64    77    90   103   116   129   142   155   168   181   194   207   220   233
# 13 M     Z        13    26    39    52    65    78    91   104   117   130   143   156   169   182   195   208   221   234

对解决方案感兴趣的人:

DaveArmstrong的解决方案使我能够横向排列我的数据。但是,它将col1和col2组合在一起。我想搭配两种颜色。从每个数据集中取2个。我提供了脚本的屏幕截图(附在此消息中),其中包含需要在Dave的脚本中实现的附加行。

完整解决方案

相关内容

  • 没有找到相关文章

最新更新