如何通过 R 中选定的列值转置 table?

How can I transpose my table by selected column values in R?

我在 R 工作。 如何转置我的 table 由客户创建新列。这些行将由 idMarket 和部分组成,其他列将给出每个客户在这些市场和部分中的分数。

idMarket  idSection idClient  Score  %

2          99         23       100    1
2          99         56       25     0,2
3          67         23       56     0,5
3          67         56       50     0,3

预计table:


idMarket  idSection  Client23  %23   Client56   %56

2          99         100      1        25      0,2
3          67          56      0,5      50      0,3


谢谢!!

pivot_wider(df, c(idMarket, idSection), names_from = idClient, values_from = c(Score, `%`))
# A tibble: 2 x 6
  idMarket idSection Score_23 Score_56 `%_23` `%_56`
     <int>     <int>    <int>    <int>  <dbl>  <dbl>
1        2        99      100       25    1      0.2
2        3        67       56       50    0.5    0.3


reshape(df, dir='wide', timevar = 'idClient', idvar = c('idMarket', 'idSection'), sep='_')
  idMarket idSection Score_23 %_23 Score_56 %_56
1        2        99      100  1.0       25  0.2
3        3        67       56  0.5       50  0.3

我采用了一种可能效率较低的方式,但我想我会使用 dplyr 和 tidyr 提供替代方案。我所做的是将 Score/% 列聚集在一起,然后使用 Client/% 命名一个新名称,然后根据您的要求广泛传播数据。这不会按照您想要的 table 的确切顺序,但仍会为您提供相同的数据:

library(dplyr)
library(tidyr)

dat<-data.frame("idMarket" = c(2,2,3,3),
                "idSection" = c(99, 99, 67, 67),
                "idClient" = c(23, 56 ,23, 56),
                "Score" = c(100, 25, 56, 50),
                "%" = c("1", "0,2", "0,5", "0,3"),
                check.names = F, stringsAsFactors = F
)

dat2<-dat%>%
  tidyr::gather("key", "value", Score, `%`)%>%
  mutate(key = ifelse(key == "Score", paste0("Client", idClient), paste0("%", idClient)))%>%
  select(-idClient)%>%
  tidyr::spread(key, value)
dat2
  idMarket idSection %23 %56 Client23 Client56
1        2        99   1 0,2      100       25
2        3        67 0,5 0,3       56       50