gpt4 book ai didi

r - 在 R 中使用 dplyr、tidyr、reshape2 进行复杂熔化

转载 作者:行者123 更新时间:2023-12-04 09:35:00 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





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]这很适合你的情况。您可以放弃 timeid如果您不需要它们,则变量:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com