r - 使用 dplyr 重塑数据:使用附加标签将 2 列转换为 1 列(替代方法)
问题描述
我有几个数据框如下:
Date Identifier1 Identifier2 Status UsageGroup Value1 Value2
2011-08-05 A1 A2 1 2 3022 30
2013-10-06 A1 A2 1 2 5368 62
2014-9-21 A1 A2 1 2 9567 112
2015-12-25 A1 A2 1 2 15002 178
2016-10-21 A1 A2 1 2 18001 236
我想将它们重塑为:
Date Identifier1 Identifier2 Status UsageGroup Value Id
2011-08-05 A1 A2 1 2 3022 1
2013-10-06 A1 A2 1 2 5368 1
2014-9-21 A1 A2 1 2 9567 1
2015-12-25 A1 A2 1 2 15002 1
2016-10-21 A1 A2 1 2 18001 1
2011-08-05 A1 A2 1 2 30 2
2013-10-06 A1 A2 1 2 62 2
2014-9-21 A1 A2 1 2 112 2
2015-12-25 A1 A2 1 2 178 2
2016-10-21 A1 A2 1 2 236 2
我已经使用完全连接完成了它,并将原始数据集拆分如下:
df1<-df %>% rename(value=Value1) %>% select(-c("Value2")) %>% mutate(id=1)
df2<-df %>% rename(value=Value2) %>% select(-c("Value1")) %>% mutate(id=2)
df<-fulljoin(df1,df2) %>% group_by(id)
但是我想知道是否有更有效的方法,因为我必须加入相当大的数据集。
解决方案
你tidyverse
可以这样做:
df %>%
gather(var, Value, -c(Date, Identifier1, Identifier2, Status, UsageGroup)) %>%
mutate(Id = parse_number(var)) %>%
select(-var)
Date Identifier1 Identifier2 Status UsageGroup Value Id
1 2011-08-05 A1 A2 1 2 3022 1
2 2013-10-06 A1 A2 1 2 5368 1
3 2014-9-21 A1 A2 1 2 9567 1
4 2015-12-25 A1 A2 1 2 15002 1
5 2016-10-21 A1 A2 1 2 18001 1
6 2011-08-05 A1 A2 1 2 30 2
7 2013-10-06 A1 A2 1 2 62 2
8 2014-9-21 A1 A2 1 2 112 2
9 2015-12-25 A1 A2 1 2 178 2
10 2016-10-21 A1 A2 1 2 236 2
它将数据从宽格式转换为长格式,然后创建一个 ID。
推荐阅读
- reactjs - 如何从 React 中的给定选择框中打印带有选定选项的值消息
- powershell - 使用 powershell 根据天数将文件和文件夹结构从一个驱动器移动到另一个驱动器
- azure - 从 Azure AD 获取用户信息
- python - 找出对象列在熊猫中是否具有多种数据类型的最快和/或最惯用的方法是什么?
- python - 在模板中导入数据并批量创建 PDF
- c# - 在范围报告中编译所有测试套件的结果
- docker - 突破 Docker 容器到主机文件系统的根目录
- c# - NuGet 安装 - 文件夹中已存在包“EntityFramework.6.2.0” - csproj 引用另一个项目包文件夹
- google-analytics - 我在哪里将从 Google Analytics 收到的 p12 文件上传到 Pentaho Server?
- dictionary - 如何将 map[string]int 切片成块