使用重塑问题从广泛转换为长期的问题?

时间:2017-04-05 10:09:37

标签: r reshape

我正在尝试将数据从宽转换为长。我有一个id变量和131列时间数据。所有列都是整数格式。数据以csv格式导入。

> class(ECGHR)
[1] "tbl_df"     "tbl"        "data.frame"

以下是22个时变变量的前6行数据:

> head (ECGHR)
# A tibble: 6 × 132
 id    T0    T1    T2    T3    T4    T5    T6    T7    T8    T9   T10   T11  T12   T13   T14   T15   T16   T17   T18   T19   T20   T21   T22
<int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
1  2003    70    65    69    71    68    74    67    65    60    66    59    99    74    73    87    94    88    88    98    73    72    63    79
2  2004    98   105    85    87    83    83    77    71    75    73    73    71    87    74    79    75    72    71    71    68    86    72    73
3  2008    93    92    91    90    93    88    89    83    93    96    95    94    89    91    87    93    88   100    93    92    89    93    83
4  2010    71    69    74    71    74    68    74    68    78    75    81    72    74    77    74    70    64    68    65    69    66    73    75
5  2018    90    86    93    91    86    82    97    95    95    83    79    88    78    92    86    94    83    79    96    91    72    78    80
6  2019    60    58    59    58    66    68    73    77    58   110    56    56    53    49    73    56    45    50    46    45    46    54    50

这是我的重塑代码:

ECGHR_long=reshape(ECGHR, varying=c(2:132), direction="long", idvar="id", sep="")

以下是警告信息:

  

&#39> row.names&lt; - .data.frame&#39;(&#39; tmp &#39;,value = paste(d [,idvar],   次[1L],:无效&#39; row.names&#39;长度另外:警告信息:   不推荐在tibble上设置行名称。

我习惯于处理数据框,但我无法解决为什么它不会重塑(我是R的新手)。我需要将其转换为数据帧吗?我非常感谢任何见解!

1 个答案:

答案 0 :(得分:3)

要在R的基础上使用reshape函数试试这个 - 我们省略了idvar="id",因为它可以自己解决这个问题,但如果你添加它就不会受到伤害

reshape(as.data.frame(ECGHR), dir = "long", varying = list(2:ncol(ECGHR)),
  times = names(ECGHR)[-1])
##           id time T0
## 2003.T0 2003   T0 70
## 2004.T0 2004   T0 98
## 2008.T0 2008   T0 93
## 2010.T0 2010   T0 71
## 2018.T0 2018   T0 90
## 2019.T0 2019   T0 60
## etc.

或使用reshape2包:

library(reshape2)
melt(ECGHR, id.vars = 1)

##     id variable value
## 1 2003       T0    70
## 2 2004       T0    98
## 3 2008       T0    93
## 4 2010       T0    71
## 5 2018       T0    90
## 6 2019       T0    60

注意:我们使用了这个输入:

Lines <- "id    T0    T1    T2    T3    T4    T5    T6    T7    T8    T9   T10   T11  T12   T13   T14   T15   T16   T17   T18   T19   T20   T21   T22
1  2003    70    65    69    71    68    74    67    65    60    66    59    99    74    73    87    94    88    88    98    73    72    63    79
2  2004    98   105    85    87    83    83    77    71    75    73    73    71    87    74    79    75    72    71    71    68    86    72    73
3  2008    93    92    91    90    93    88    89    83    93    96    95    94    89    91    87    93    88   100    93    92    89    93    83
4  2010    71    69    74    71    74    68    74    68    78    75    81    72    74    77    74    70    64    68    65    69    66    73    75
5  2018    90    86    93    91    86    82    97    95    95    83    79    88    78    92    86    94    83    79    96    91    72    78    80
6  2019    60    58    59    58    66    68    73    77    58   110    56    56    53    49    73    56    45    50    46    45    46    54    50"

ECGHR <- read.table(text = Lines, header = TRUE)