用多个钥匙收集

时间:2017-01-27 15:14:47

标签: r transpose tidyr

我之前已经问过这个问题,但我不太明白。

我有一个如下所示的数据集:

Precinct  Crime       2000   2001  2002  2003  
1         Murder       3      1     2     2
1         Rape         12     5     10    11
1         Burglary     252   188    297   403
2         Murder       4      2      1     0 

列出年内列出的每项犯罪的价值。

我试图将其重新排列为更简单的集合,如下所示:

Precinct    Crime    Year   Value
   1        Murder   2000     3
   1        Rape     2000     12

我该怎么做呢?我知道我应该使用tidyr' gather,但推断多个键的解决方案对我来说并不适用。

2 个答案:

答案 0 :(得分:7)

以下作品:

df %>% gather(Year, Value, -Precinct, -Crime)

答案 1 :(得分:0)

您需要指定应收集的所有列(或删除应收集_not_be的所有列):

library(tidyverse)

dat <- tibble::tibble(
  Precinct = c(1, 1, 1, 2),
  Crime = c("Murder", "Rape", "Burglary", "Murder"),
  `2000` = c(3, 12, 252, 4),
  `2001` = c(1, 5, 188, 2),
  `2002` = c(2, 10, 297, 1),
  `2003` = c(2, 11, 403, 0)
)

tidyr::gather(dat, Year, Value, 3:6)
tidyr::gather(dat, Year, Value, -Precinct, -Crime)