这个问题在这里已经有了答案:
Combine Multiple Columns Into Tidy Data [duplicate]
(3 个回答)
4年前关闭。
我试图了解“融化”在复杂情况下的工作原理。我已经看到很多关于在非常简单的情况下使用这些包的帖子和博客——但在更困难的情况下却没有。例如:
假设我在数据框中有以下数据:
CA UNIT SCP DATE1 TIME1 DESC1 ENTRIES1 EXITS1
1 A002 R051 02-00-00 07-27-13 00:00:00 REGULAR 4209603 1443585
2 A002 R051 02-00-00 07-28-13 08:00:00 REGULAR 4210490 1443821
3 A002 R051 02-00-00 07-29-13 16:00:00 REGULAR 4211586 1444302
4 A002 R051 02-00-00 07-30-13 14:01:46 LOGON 4213192 1444700
5 A002 R051 02-00-00 07-30-13 16:00:00 REGULAR 4213333 1444737
6 A002 R051 02-00-00 08-01-13 00:00:00 REGULAR 4215894 1445274`
并继续向右列(抱歉,我无法在代码块中正确格式化):
`DATE2 TIME2 DESC2 ENTRIES2 EXITS2
1 07-27-13 08:00:00 REGULAR 4209663 1443616
2 07-28-13 16:00:00 REGULAR 4210775 1443921
3 07-30-13 00:00:00 REGULAR 4212845 1444369
4 07-30-13 14:02:18 DOOR OPEN 4213192 1444700
5 07-31-13 00:00:00 REGULAR 4214345 1444823
6 08-01-13 08:00:00 REGULAR 4215977 1445362`
我想将其融合到具有以下格式的数据框中:
CA UNIT SCP DATE TIME DESC ENTRIES EXITS
1 A002 R051 02-00-00 07-27-13 00:00:00 REGULAR 4209603 1443585
2 A002 R051 02-00-00 07-28-13 08:00:00 REGULAR 4210490 1443821
3 A002 R051 02-00-00 07-29-13 16:00:00 REGULAR 4211586 1444302
4 A002 R051 02-00-00 07-30-13 14:01:46 LOGON 4213192 1444700
5 A002 R051 02-00-00 07-30-13 16:00:00 REGULAR 4213333 1444737
6 A002 R051 02-00-00 08-01-13 00:00:00 REGULAR 4215894 1445274
7 A002 R051 02-00-00 07-27-13 08:00:00 REGULAR 4209663 1443616
8 A002 R051 02-00-00 07-28-13 16:00:00 REGULAR 4210775 1443921
9 A002 R051 02-00-00 07-30-13 00:00:00 REGULAR 4212845 1444369
10A002 R051 02-00-00 07-30-13 14:02:18 DOOR OPEN 4213192 1444700
11A002 R051 02-00-00 07-31-13 00:00:00 REGULAR 4214345 1444823
12A002 R051 02-00-00 08-01-13 08:00:00 REGULAR 4215977 1445362
这里的挑战是我想要“融化”的列具有不同的数据类型。我阅读的所有帖子都非常简单,并假设所有融化的列都是相同的数据类型,并且会落入很好的键/值对中。这显然不是这里的情况。
我发现另一个帖子表明可以使用统计数据中的“替换”来完成这种重组。我明白了。但是如果 dplyr、reshape2 和 tidyr 不能用于更复杂的现实世界场景,那么真正的用途是什么?
请展示如何使用 tidyr、dplyr 或 reshape2 执行此操作。
先感谢您!
最佳答案
这是 reshape
的选项从基础 R,如果您查看 ?reshape
默认分隔符为 .
如果您指定 sep
如""
,然后它会使用正则表达式来分割列名[A-Za-z][0-9]
这很适合你的情况。您可以放弃 time
和 id
如果您不需要它们,则变量:
reshape(df, varying = 4:13, dir = "long", sep = "")
CA UNIT SCP time DATE TIME DESC ENTRIES EXITS id 1: A002 R051 02-00-00 1 07-27-13 00:00:00 REGULAR 4209603 1443585 1 2: A002 R051 02-00-00 1 07-28-13 08:00:00 REGULAR 4210490 1443821 2 3: A002 R051 02-00-00 1 07-29-13 16:00:00 REGULAR 4211586 1444302 3 4: A002 R051 02-00-00 1 07-30-13 14:01:46 LOGON 4213192 1444700 4 5: A002 R051 02-00-00 1 07-30-13 16:00:00 REGULAR 4213333 1444737 5 6: A002 R051 02-00-00 1 08-01-13 00:00:00 REGULAR 4215894 1445274 6 7: A002 R051 02-00-00 2 07-27-13 08:00:00 REGULAR 4209663 1443616 1 8: A002 R051 02-00-00 2 07-28-13 16:00:00 REGULAR 4210775 1443921 2 9: A002 R051 02-00-00 2 07-30-13 00:00:00 REGULAR 4212845 1444369 3 10: A002 R051 02-00-00 2 07-30-13 14:02:18 DOOROPEN 4213192 1444700 4 11: A002 R051 02-00-00 2 07-31-13 00:00:00 REGULAR 4214345 1444823 5 12: A002 R051 02-00-00 2 08-01-13 08:00:00 REGULAR 4215977 1445362 6
关于r - 在 R 中使用 dplyr、tidyr、reshape2 进行复杂熔化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38946921/