首页 > 解决方案 > 从 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),但我发现它在这种情况下不起作用。=(

有什么办法让它工作吗?我想我的大脑停止工作了。

问候,

标签: rdataframe

解决方案


首先,为每个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  

推荐阅读