条件转置数据帧

时间:2018-04-02 19:49:00

标签: r

以下是我的数据:

  # A tibble: 12 x 6
   X1    X2             revenue   concentration   payroll    empl    
   <chr> <chr>          <int>            <dbl>    <int>      <int>   
 1 22    UTILITIES       NA               NA      NA          NA      
 2 NA    A              411713327        100     594684702   703
 3 NA    B              60450109         14.7    89399263    565 
 4 NA    C              94267425         22.9    62051796    221 
 5 NA    D              167024533        40.6    735288219   583
 6 NA    E              265695265        64.5    406753391   541

我想要的是以下

 X1    X2             A.revenue     B.revenue    C.Revenue A.concentration B.concentration C.concentration   A.payroll B.payroll C.Payroll    A.empl B.empl C.empl     
   <chr> <chr>          <int>            <dbl>    <int>      <int>   
 1 22    UTILITIES       411713327  60450109     9426742       100   14.7   22.9    40.6    64.5            etc.etc...

我知道没有足够的解释,但我希望这似乎是可以理解的。

1 个答案:

答案 0 :(得分:0)

希望这是足够普遍的,但正如@ 42评论,我们可以使用更广泛的问题描述:

library(tidyverse)
df %>%
  mutate(X2b = ifelse(!is.na(X1),X2,NA)) %>%
  fill(X1,X2b) %>%
  filter(!is.na(revenue)) %>%
  gather(,,-c(X1,X2,X2b)) %>%
  unite(key,key,X2,sep=".") %>%
  spread(key,value)
# 
# X1       X2b concentration.A concentration.B concentration.C concentration.D concentration.E empl.A empl.B empl.C empl.D empl.E
# 1 22 UTILITIES             100            14.7            22.9            40.6            64.5    703    565    221    583    541
# payroll.A payroll.B payroll.C payroll.D payroll.E revenue.A revenue.B revenue.C revenue.D revenue.E
# 1 594684702  89399263  62051796 735288219 406753391 411713327  60450109  94267425 167024533 265695265