首页 > 解决方案 > 基于一个共享因素投射/传播 2 列

问题描述

我正在为此苦苦挣扎-抱歉。这是我的财产:

library(dplyr)
library(reshape2)

haves <- data.frame(
    id = c(1, 1, 1, 1, 1)
    , factor1 = c("f1", "f1", "f1", "f1", "f1")
    , factor2 = c("f2", "f2", "f2", "f2", "f2")
    , number_1 = c(1,2,3,10,11)
    , number_2 = c(43,44,45,52,53)
    , age = c(2, 2, 2, 9, 9)
    , date1 = c(as.Date("2014-07-01"), as.Date("2014-07-01"), as.Date("2014-07-01"), as.Date("2015-02-01"), as.Date("2015-02-01"))
    , y = c(554.5, 554.5, 554.5, 616, 616)
    , x = c(2,1,0,3,0)
)

haves

  id factor1 factor2 number_1 number_2 age      date1     y x
1  1      f1      f2        1       43   2 2014-07-01 554.5 2
2  1      f1      f2        2       44   2 2014-07-01 554.5 1
3  1      f1      f2        3       45   2 2014-07-01 616.0 0
4  1      f1      f2       10       52   9 2015-02-01 616.0 3
5  1      f1      f2       11       53   9 2015-02-01 616.0 0

我想根据 x 投射/传播 number_1 和 number_2 中的值来得到这个:

在此处输入图像描述

标签: r

解决方案


我猜你正在寻找pivot_wider解决方案:

library(tidyr)

haves %>%
  pivot_wider(names_from = x, values_from = starts_with("number_"), values_fill = 0)

给你

# A tibble: 2 x 14
     id factor1 factor2   age date1          y number_1_2 number_1_1 number_1_0 number_1_3 number_2_2 number_2_1 number_2_0
  <dbl> <fct>   <fct>   <dbl> <date>     <dbl>      <dbl>      <dbl>      <dbl>      <dbl>      <dbl>      <dbl>      <dbl>
1     1 f1      f2          2 2014-07-01  554.          1          2          3          0         43         44         45
2     1 f1      f2          9 2015-02-01  616           0          0         11         10          0          0         53

推荐阅读