r - 从 R 中的现有列值创建新列(使用其他列作为键)
问题描述
我正在尝试重塑数据框,从 2 列数据框创建新列,但我有点迷失在这里。
原始数据框如下所示:
Name | Roles
--------------------------------
John | Account Creator
John | Security Manager
John | E-mail Admin
Paul | Account Creator
Mary | Security Manager
Mary | E-mail Admin
Erick | Ticket Manager
Erick | E-mail Admin
--------------------------------
我试图把它变成这样:
Name | Role_01 | Role_02 | Role_03
-------------------------------------------------------------------
John | Account Creator | Security Manager | E-mail Admin
Paul | Account Creator | |
Mary | Security Manager | E-mail Admin |
Erick | Ticket Manager | E-mail Admin |
-------------------------------------------------------------------
问题是角色的数量是可变的。在我的示例中,最大值为 3,但实际数据框有时具有 19 个不同的角色(将来可能会更多)。
我曾尝试使用传播(和 pivot_wider),但我发现它在这种情况下不起作用。=(
有什么办法让它工作吗?我想我的大脑停止工作了。
问候,
解决方案
首先,为每个Name
. 然后,您可以使用pivot_wider
:
library(tidyverse)
df %>%
group_by(Name) %>%
mutate(Count = 1:n()) %>%
pivot_wider(id_cols = Name,
names_from = Count,
values_from = Roles,
names_prefix = "Role_")
输出
Name Role_1 Role_2 Role_3
<chr> <chr> <chr> <chr>
1 John Account Creator Security Manager E-mail Admin
2 Paul Account Creator NA NA
3 Mary Security Manager E-mail Admin NA
4 Erick Ticket Manager E-mail Admin NA
推荐阅读
- python - 您将如何使用给定的输入树递归地计算二叉树的总和?
- google-apps-script - 学生填写 Google 表格时的教师表格通知
- react-native - 有没有办法在不使用 View 的情况下为组件指定默认样式?
- c++ - 如何从 C++ 中的模板类访问 std::vector 数据
- fortran - 未复制 Fortran 派生类型的指针成员
- jestjs - 使用 jest.run() 或 jest.runCLI() 运行所有测试或以编程方式运行 jest
- c - 如何在 C 中为 scanf 添加循环?
- android - 错误 INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
- python - Nested XML parsing using python Element Tree or Minidom
- python - 理解和应用 k-means 聚类进行主题建模