R中的折叠表

R中的折叠表,r,R,我试图用R总结一个表格,但不确定最好的方法 我尝试了dplyr摘要,但它似乎不是非常有效,也不清楚我需要做什么 起始数据 table <- data.frame(Company1 = c("A","A","C","C"), Company2 = c("B", "B", "D", "D"), target = c("sales", "turnover", "sales", "turnover"), result = c(200, 5000, 300, 7500)) Comp

我试图用R总结一个表格,但不确定最好的方法

我尝试了dplyr摘要,但它似乎不是非常有效,也不清楚我需要做什么

起始数据

table <- data.frame(Company1 = c("A","A","C","C"), Company2 = c("B", "B", 
"D", "D"), target = c("sales", "turnover", "sales", "turnover"), result = 
c(200, 5000, 300, 7500))


     Company1 Company2   target result
 1        A        B    sales    200
 2        A        B turnover   5000
 3        C        D    sales    300
 4        C        D turnover   7500

我们可以使用
tidyr
unite
组合
结果
目标
列,然后
spread
以宽格式获取数据

library(tidyr)

table %>%
  unite(result, target, result, sep = "-", remove = FALSE) %>%
  spread(target, result)

#  Company1 Company2     sales      turnover
#1        A        B sales-200 turnover-5000
#2        C        D sales-300 turnover-7500

我们可以使用
data.table中的
dcast

library(data.table)
dcast(setDT(table)[, new := paste(target, result, sep = ' - ')], 
      Company1 + Company2 ~ target, value.var = 'new')
#  Company1 Company2       sales        turnover
#1:        A        B sales - 200 turnover - 5000
#2:        C        D sales - 300 turnover - 7500

太棒了,谢谢。除了fill函数外,对tidyr不太熟悉。没有意识到它能提供多少。再次感谢!
library(data.table)
dcast(setDT(table)[, new := paste(target, result, sep = ' - ')], 
      Company1 + Company2 ~ target, value.var = 'new')
#  Company1 Company2       sales        turnover
#1:        A        B sales - 200 turnover - 5000
#2:        C        D sales - 300 turnover - 7500