对多个值使用价差

Using spread for more than one value

我正在用 R 编写代码,在重塑我的数据模型时遇到了一个小问题。这是我的数据 table 类似于:

data sample

name      job                company    number
John      Product Manager       Google       1
Sam       software developer    Microsoft    1
Sam       Product Manager       Microsoft    2
Matt      hr director           Chevron      1
Cassy     Head of Investments   Apple        1
Cassy     CEO                   JP Morgan    2
Cassy     CFO                   Amazon       3

这就是我试图让我的数据看起来像:

name      job_1                 company_1       job_2         company_2     job_3   company_3
John      Product Manager       Google       
Sam       software developer    Microsoft    Product Manager  Microsoft
Matt      hr director           Chevron      
Cassy     Head of Investments   Apple         CEO             JP Morgan      CFO     Amazon
Cassy     CFO                   Amazon       

我尝试使用 spread() 但它不允许我在 value = 部分中放置更多的变量,而且我无法将这些值连接成一个字符串并使用 sep() 因为实际的数据文件需要几个运行 天。有什么办法吗?

spread 已替换为 pivot_wider,您可以在其中传递多个值列。

tidyr::pivot_wider(df, names_from = number, values_from = c(job, company))

# A tibble: 4 x 7
#  name  job_1               job_2           job_3 company_1 company_2 company_3
#  <chr> <chr>               <chr>           <chr> <chr>     <chr>     <chr>    
#1 John  Product_Manager     NA              NA    Google    NA        NA       
#2 Sam   software_developer  Product_Manager NA    Microsoft Microsoft NA       
#3 Matt  hr_director         NA              NA    Chevron   NA        NA       
#4 Cassy Head_of_Investments CEO             CFO   Apple     JP_Morgan Amazon   

您也可以使用 data.table dcast

library(data.table)
dcast(setDT(df), name~number, value.var = c("job", "company"))