Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.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
使用tidyr重塑表格_R_Tidyr - Fatal编程技术网

使用tidyr重塑表格

使用tidyr重塑表格,r,tidyr,R,Tidyr,我有一个大桌子,我正试图用tidyr和它的长格式来重塑它,我想换成宽格式。桌子很大,这比我想象的要复杂 这张桌子看起来像这样 Codes areas var1 var2 var3 1111 1010 2 2 34 1112 1010 3 7 18 1113 1010 20 12 11 1114 1010 19 11 22 [...] [...]

我有一个大桌子,我正试图用tidyr和它的长格式来重塑它,我想换成宽格式。桌子很大,这比我想象的要复杂

这张桌子看起来像这样

Codes      areas  var1  var2  var3
1111       1010    2      2    34
1112       1010    3      7    18
1113       1010    20     12   11
1114       1010    19     11   22
[...]      [...]   [...]  [...]  [...]
1111       1020    14     19   12
1112       1020    10     10   13
目标是在每个区域获得一行宽格式的变量

比如:


到目前为止,我已经尝试过三年一次的传播和变异,但没有多大成功。

您需要三个三年一次的步骤:

d %>%
  gather(key, value, -Codes, -areas) %>%
  unite(combined, Codes, key, sep = "") %>%
  spread(combined, value)
其中
d
是您的数据


要解释这些步骤,请执行以下操作:

library(tidyr)
#设置数据

d我可以用下面的方法做这件事,但它可能不是最好/最有效的

df <- read.table(header = TRUE, stringsAsFactors = FALSE, text = '
Codes      areas  var1  var2  var3
1111       1010    2      2    34
1112       1010    3      7    18
1113       1010    20     12   11
1114       1010    19     11   22
1111       1020    14     19   12
1112       1020    10     10   13')

df_new <-
  df %>%
  gather(var_type, var_value, -areas, -Codes) %>%
  mutate(var_code = paste(Codes, var_type, sep = '_')) %>%
  select(-Codes, -var_type) %>%
  spread(var_code, var_value)

df_new

#  areas 1111_var1 1111_var2 1111_var3 1112_var1 1112_var2 1112_var3 1113_var1 1113_var2 1113_var3 1114_var1 1114_var2 1114_var3
#1  1010         2         2        34         3         7        18        20        12        11        19        11        22
#2  1020        14        19        12        10        10        13        NA        NA        NA        NA        NA        NA

你能重新格式化“Like:”部分让它更清晰一点吗?David,我正在我的桌子上尝试这些步骤,但是我得到了一个到达的getOption(“max.print”)错误。我将尝试增加max.print。下面的帖子@Monduiz中有一些关于“max.print”错误的讨论,你为什么还要打印整个表格?尝试将它从dplyr转换为tbl_df(),例如,在最后一步添加%>%tbl_df()。David,它工作得非常好!非常感谢。我不知道unite。太有用了!
d %>%
  gather(key, value, -Codes, -areas)
#> Source: local data frame [18 x 4]
#> 
#>    Codes areas    key value
#>    (int) (int) (fctr) (int)
#> 1   1111  1010   var1     2
#> 2   1112  1010   var1     3
#> 3   1113  1010   var1    20
#> 4   1114  1010   var1    19
#> 5   1111  1020   var1    14
#> 6   1112  1020   var1    10
#> 7   1111  1010   var2     2
#> 8   1112  1010   var2     7
#> 9   1113  1010   var2    12
#> 10  1114  1010   var2    11
#> 11  1111  1020   var2    19
#> 12  1112  1020   var2    10
#> 13  1111  1010   var3    34
#> 14  1112  1010   var3    18
#> 15  1113  1010   var3    11
#> 16  1114  1010   var3    22
#> 17  1111  1020   var3    12
#> 18  1112  1020   var3    13
d %>%
  gather(key, value, -Codes, -areas) %>%
  unite(combined, Codes, key, sep = "")
#> Source: local data frame [18 x 3]
#> 
#>    combined areas value
#>       (chr) (int) (int)
#> 1  1111var1  1010     2
#> 2  1112var1  1010     3
#> 3  1113var1  1010    20
#> 4  1114var1  1010    19
#> 5  1111var1  1020    14
#> 6  1112var1  1020    10
#> 7  1111var2  1010     2
#> 8  1112var2  1010     7
#> 9  1113var2  1010    12
#> 10 1114var2  1010    11
#> 11 1111var2  1020    19
#> 12 1112var2  1020    10
#> 13 1111var3  1010    34
#> 14 1112var3  1010    18
#> 15 1113var3  1010    11
#> 16 1114var3  1010    22
#> 17 1111var3  1020    12
#> 18 1112var3  1020    13
d %>%
  gather(key, value, -Codes, -areas) %>%
  unite(combined, Codes, key, sep = "") %>%
  spread(combined, value)
#> Source: local data frame [2 x 13]
#> 
#>   areas 1111var1 1111var2 1111var3 1112var1 1112var2 1112var3 1113var1
#>   (int)    (int)    (int)    (int)    (int)    (int)    (int)    (int)
#> 1  1010        2        2       34        3        7       18       20
#> 2  1020       14       19       12       10       10       13       NA
#> Variables not shown: 1113var2 (int), 1113var3 (int), 1114var1 (int),
#>   1114var2 (int), 1114var3 (int)
df <- read.table(header = TRUE, stringsAsFactors = FALSE, text = '
Codes      areas  var1  var2  var3
1111       1010    2      2    34
1112       1010    3      7    18
1113       1010    20     12   11
1114       1010    19     11   22
1111       1020    14     19   12
1112       1020    10     10   13')

df_new <-
  df %>%
  gather(var_type, var_value, -areas, -Codes) %>%
  mutate(var_code = paste(Codes, var_type, sep = '_')) %>%
  select(-Codes, -var_type) %>%
  spread(var_code, var_value)

df_new

#  areas 1111_var1 1111_var2 1111_var3 1112_var1 1112_var2 1112_var3 1113_var1 1113_var2 1113_var3 1114_var1 1114_var2 1114_var3
#1  1010         2         2        34         3         7        18        20        12        11        19        11        22
#2  1020        14        19        12        10        10        13        NA        NA        NA        NA        NA        NA
df %>%
  gather(var_type, var_value, -areas, -Codes) %>%
  unite(NewCode, Codes, var_type, sep = '') %>%
  spread(NewCode, var_value)