【问题标题】:pivot_wider removing a date column when pivoting in R在 R 中旋转时,pivot_wider 删除日期列
【发布时间】:2020-03-29 11:13:18
【问题描述】:

我有一些长数据,我正在尝试使用 pivot_wider。我目前拥有的是:

df %>% group_by(TICKER) %>% 
  mutate(row_id_for_pivot = row_number()) %>%
  pivot_wider(names_from = TICKER, values_from = RET, id_cols = row_id_for_pivot)

这给了我:

   row_id_for_pivot JEQ       RLH       PMC      
              <int> <chr>     <chr>     <chr>    
 1                1 0.007634  0.200405  0.025189 
 2                2 0.041667  0.065767  0.053440 
 3                3 0.060000  0.142405  0.062391 
 4                4 0.012007  0.058172  0.059276

但是我丢失了原始数据中的date 列。

如何保留日期列?

数据:

structure(list(date = structure(c(14638, 14666, 14699, 14729, 
14757, 14790, 14820, 14852, 14882, 14911, 14943, 14974, 15005, 
15033, 15064, 15093, 15125, 15155, 15184, 15217, 15247, 15278, 
15308, 15338, 15370, 15399, 15429, 15460, 15491, 15520, 15552, 
15583, 15611, 15644, 15674, 15705, 15736, 15764, 15792, 15825, 
15856, 15884, 15917, 15947, 15978, 16009, 16038, 16070, 16101, 
16129, 16160, 16190, 16220, 16251, 16282, 16311, 16343, 16374, 
16402, 16435, 16435, 16465, 16493, 16525, 16555, 16584, 16616, 
16647, 16678, 16708, 16738, 16769, 16800, 16800, 16829, 16860, 
16891, 16920, 16952, 16982, 17011, 17044, 17074, 17105, 17135, 
17165, 17165, 17197, 17225, 17256, 17284, 17317, 17347, 17378, 
17409, 17438, 17470, 17500, 17529, 17529, 17562, 17590, 17619, 
17651, 17682, 17711, 17743, 17774, 17802, 17835, 17865, 17896, 
17896, 14638, 14666, 14699, 14729, 14757, 14790, 14820, 14852, 
14882, 14911, 14943, 14974, 15005, 15033, 15064, 15093, 15125, 
15155, 15184, 15217, 15247, 15278, 15308, 15338, 15370, 15399, 
15429, 15460, 15491, 15520, 15552, 15583, 15611, 15644, 15674, 
15705, 15736, 15764, 15792, 15825, 15856, 15884, 15917, 15947, 
15978, 16009, 16038, 16070, 16101, 16129, 16160, 16190, 16220, 
16251, 16282, 16311, 16343, 16374, 16402, 16435, 16465, 16493, 
16525, 16555, 16584, 16616, 16647, 16678, 16708, 16738, 16769, 
16800, 16829, 16860, 16891, 16920, 16952, 16982, 17011, 17044, 
17074, 17105, 17135, 17165, 17197, 17225, 17256, 17284, 17317, 
17347, 17378, 17409, 17438, 17470, 17500, 17529, 17562, 17590, 
17619, 17651, 17682, 17711, 17743, 17774, 17802, 17835, 17865, 
17896, 14638, 14666, 14699, 14729, 14757, 14790, 14820, 14852, 
14882, 14911, 14943, 14974, 15005, 15033, 15064, 15093, 15125, 
15155, 15184, 15217, 15247, 15278, 15308, 15338, 15370, 15399, 
15429, 15460, 15491, 15520, 15552, 15583, 15611, 15644, 15674, 
15705, 15736, 15764, 15792, 15825, 15856, 15884, 15917, 15947, 
15978, 16009, 16038, 16070, 16101, 16129, 16160, 16190, 16220, 
16251, 16282, 16311, 16343, 16374, 16402, 16435, 16465, 16493, 
16525, 16555, 16584, 16616, 16647, 16678, 16708, 16738, 16769, 
16800, 16829, 16860, 16891, 16920, 16952, 16982, 17011, 17044, 
17074, 17105, 17135, 17165, 17197, 17225, 17256, 17284, 17317, 
17347, 17378, 17409, 17438, 17470, 17500, 17529), class = "Date"), 
    TICKER = c("JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", 
    "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", 
    "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", 
    "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", 
    "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", 
    "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", 
    "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", 
    "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", 
    "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", 
    "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", 
    "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", 
    "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", 
    "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "JEQ", "RLH", "RLH", 
    "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", 
    "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", 
    "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", 
    "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", 
    "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", 
    "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", 
    "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", 
    "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", 
    "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", 
    "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", 
    "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", 
    "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "RLH", "PMC", "PMC", 
    "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", 
    "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", 
    "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", 
    "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", 
    "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", 
    "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", 
    "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", 
    "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", 
    "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", 
    "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", "PMC", 
    "PMC", "PMC", "PMC", "PMC"), RET = c("0.007634", "0.041667", 
    "0.060000", "0.012007", "-0.113559", "-0.034417", "0.041584", 
    "-0.013308", "0.042389", "0.005545", "0.031250", "0.100713", 
    "0.003268", "0.076629", "-0.066636", "-0.024311", "-0.008306", 
    "0.021776", "0.011475", "-0.085900", "-0.063830", "0.013258", 
    "-0.031776", "-0.024710", "0.064000", "0.054511", "0.010695", 
    "-0.033510", "-0.080292", "0.027778", "-0.025096", "-0.001287", 
    "0.009220", "-0.015717", "0.029940", "0.091968", "0.026930", 
    "0.048951", "0.043333", "0.063898", "-0.018018", "-0.012232", 
    "-0.003096", "-0.026398", "0.090909", "-0.001462", "0.023426", 
    "0.021259", "-0.060086", "0.018265", "-0.024439", "-0.019383", 
    "0.062500", "0.045588", "0.023910", "-0.002747", "-0.020661", 
    "0.035162", "-0.022323", "-0.049509", "-0.049509", "0.048449", 
    "0.084813", "0.051948", "0.007407", "-0.008578", "0.021014", 
    "-0.035109", "-0.061481", "-0.082888", "0.090379", "0.029412", 
    "0.039734", "0.039734", "-0.089610", "-0.012839", "0.060694", 
    "0.013624", "0.034946", "-0.003896", "0.044329", "0.011236", 
    "0.014815", "-0.008516", "-0.040491", "-0.017762", "-0.017762", 
    "0.031908", "0.025000", "0.021823", "0.028894", "0.035409", 
    "0.002359", "0.018729", "0.007021", "-0.001147", "0.052813", 
    "0.034896", "0.000821", "0.000821", "0.049071", "-0.027484", 
    "-0.004348", "-0.008734", "-0.015419", "-0.011186", "-0.038462", 
    "-0.021177", "0.008414", "-0.117998", "0.027027", "-0.060471", 
    "-0.060471", "0.200405", "0.065767", "0.142405", "0.058172", 
    "-0.137435", "-0.094082", "0.247906", "-0.161074", "0.190400", 
    "0.057796", "-0.025413", "0.040417", "-0.038847", "0.113429", 
    "-0.039813", "0.067073", "-0.072000", "-0.027094", "-0.044304", 
    "-0.074172", "-0.040057", "0.035767", "0.007194", "-0.010000", 
    "0.056277", "0.050546", "0.067620", "0.015834", "0.015588", 
    "0.021251", "-0.135260", "-0.026738", "-0.141484", "0.054400", 
    "0.100152", "0.088276", "-0.053232", "-0.034806", "-0.013870", 
    "-0.081575", "-0.047473", "-0.017685", "0.088380", "-0.171429", 
    "-0.043557", "0.142315", "-0.086379", "0.100000", "-0.041322", 
    "0.029310", "-0.023451", "-0.013722", "0.015652", "-0.061644", 
    "0.000000", "0.049288", "-0.010452", "-0.003515", "0.040564", 
    "0.074576", "0.012618", "0.059190", "-0.019118", "0.049475", 
    "0.044286", "0.047880", "0.062663", "-0.009828", "0.054591", 
    "-0.036471", "-0.089133", "-0.060322", "-0.194009", "0.306195", 
    "0.142276", "-0.062871", "0.017722", "-0.097015", "0.093664", 
    "-0.176322", "0.275229", "0.007194", "0.047619", "-0.051136", 
    "-0.041916", "-0.068750", "-0.053691", "-0.078014", "0.007692", 
    "0.122137", "-0.027211", "-0.020979", "0.235714", "0.017341", 
    "0.028409", "0.088398", "0.060914", "-0.071770", "0.005155", 
    "0.010256", "0.106599", "0.068807", "0.072961", "0.092000", 
    "-0.084249", "-0.125600", "-0.174748", "-0.090909", "0.025189", 
    "0.053440", "0.062391", "0.059276", "-0.150259", "-0.106098", 
    "-0.109140", "-0.405819", "0.228093", "0.053515", "0.081673", 
    "0.054328", "-0.012227", "0.038904", "-0.026383", "0.150350", 
    "-0.062310", "0.034036", "0.000784", "0.153485", "-0.031229", 
    "0.093203", "0.003205", "-0.030032", "-0.173254", "-0.023108", 
    "0.013866", "-0.045052", "-0.163437", "0.099698", "-0.057692", 
    "0.224490", "0.004762", "-0.034755", "0.181669", "-0.013850", 
    "0.016854", "-0.010359", "-0.023029", "-0.079286", "0.211016", 
    "-0.112108", "0.056277", "-0.159836", "0.078862", "0.112283", 
    "0.529810", "-0.047830", "0.132093", "-0.009860", "0.160996", 
    "-0.028234", "-0.001839", "0.053427", "-0.055964", "-0.077807", 
    "-0.018481", "0.174376", "-0.239805", "-0.050436", "0.111058", 
    "0.086484", "0.127600", "0.016673", "0.160502", "0.001203", 
    "0.026126", "-0.042435", "-0.129890", "0.003512", "0.190760", 
    "0.028807", "-0.151714", "-0.221623", "-0.043271", "0.069199", 
    "0.123942", "-0.071886", "0.077048", "-0.048946", "0.111243", 
    "-0.152120", "0.010504", "0.045738", "-0.013917", "-0.008064", 
    "-0.048781", "0.008547", "0.046610", "0.062753", "-0.041905", 
    "0.168986", "-0.003401", "0.000000", "-0.001706", ""), row_id_for_pivot = 1:317), class = "data.frame", row.names = c(NA, 
-317L))

编辑:运行后

x1 <- df2 %>% 
  group_by(TICKER) %>% 
  mutate(row_id_for_pivot = row_number()) %>%
  pivot_wider(names_from = TICKER, values_from = RET,
              id_cols = c(date, row_id_for_pivot))


x1 %>% 
  filter(date == "2015-01-30")

(其中d2dput 日期。

我明白了:

# A tibble: 2 x 5
  date       row_id_for_pivot JEQ      RLH      PMC     
  <date>                <int> <chr>    <chr>    <chr>   
1 2015-01-30               62 0.048449 NA       NA      
2 2015-01-30               61 NA       0.012618 0.111058

编辑 2:

使用df2 作为上面我运行的数据:

df2 %>% 
  distinct(date)

这给了我 108 个观察结果

然后我运行

out <- df2 %>% 
  group_by(TICKER, year = lubridate::year(date)) %>% 
  mutate(row_id_for_pivot = row_number()) %>%
  pivot_wider(names_from = TICKER, values_from = RET,
              id_cols = c(date, row_id_for_pivot)) %>% 
  arrange(date) %>% 
  group_by(date,row_id_for_pivot ) %>% 
  summarise_at(vars(-group_cols()), toString)

这给了我 113 个观察结果。

看看它,我发现我在日期有一些重复:

2018-12-31, 2017-12-29, 2016-12-30, 2015-12-31, 2014-12-31

执行以下操作:

> df2 %>% 
+   filter(date == "2018-12-31")
        date TICKER       RET row_id_for_pivot
1 2018-12-31    JEQ -0.060471              112
2 2018-12-31    JEQ -0.060471              113
3 2018-12-31    RLH -0.090909              221

告诉我原始数据中有重复项。当我创建row_id_for_pivot 列时,我现在开始认为这是一个问题。

因此,我将新数据与更多观察值放在一起:

使用df3我运行

xN <- df3 %>% 
  distinct() %>% 
  group_by(TICKER, year = lubridate::year(date)) %>% 
  mutate(row_id_for_pivot = row_number()) %>%
  pivot_wider(names_from = TICKER, values_from = RET,
              id_cols = c(date, row_id_for_pivot)) %>% 
  arrange(date) %>% 
  group_by(date,row_id_for_pivot ) %>% 
  summarise_at(vars(-group_cols()), toString)

当它应该返回 108 unique(xN$date) 时,它给了我 126 个观察结果。

查看pivot_wider之后的xN数据,第一个重复是2012-07-31

所以我运行新数据df3

> df3 %>% 
+   filter(date == "2012-07-31")
        date TICKER       RET
1 2012-07-31   AMRE         C
2 2012-07-31     AA -0.032000
3 2012-07-31    CHE  0.038551
4 2012-07-31    MLR  0.030760
5 2012-07-31    UMC  0.038568

没有重复,但有一个C。这会不会影响我的pivot

运行以下:

> xN %>% 
+   filter(date == "2012-07-31")
# A tibble: 2 x 7
# Groups:   date [1]
  date       row_id_for_pivot AMRE  AA        CHE      MLR      UMC     
  <date>                <int> <chr> <chr>     <chr>    <chr>    <chr>   
1 2012-07-31                1 C     NA        NA       NA       NA      
2 2012-07-31                7 NA    -0.032000 0.038551 0.030760 0.038568

给我 2 个结果。

我应该先将C 设置为NA 吗?

新数据:

    df3 <- structure(list(date = structure(c(15552, 15583, 15611, 15644, 
15674, 15705, 15736, 15764, 15792, 15825, 15856, 15884, 15917, 
15947, 15978, 16009, 16038, 16070, 16101, 16129, 16160, 16190, 
16220, 16251, 16282, 16311, 16343, 16374, 16402, 16435, 16465, 
16493, 16493, 17135, 17165, 17197, 17225, 17256, 17284, 17317, 
17347, 17378, 17409, 17438, 17470, 17500, 17529, 17562, 17590, 
17619, 17651, 17682, 17711, 17743, 17774, 17802, 17835, 17865, 
17896, 14638, 14666, 14699, 14729, 14757, 14790, 14820, 14852, 
14882, 14911, 14943, 14974, 15005, 15033, 15064, 15093, 15125, 
15155, 15184, 15217, 15247, 15278, 15308, 15338, 15370, 15399, 
15429, 15460, 15491, 15520, 15552, 15583, 15611, 15644, 15674, 
15705, 15736, 15764, 15792, 15825, 15856, 15884, 15917, 15947, 
15978, 16009, 16038, 16070, 16101, 16129, 16160, 16190, 16220, 
16251, 16282, 16311, 16343, 16374, 16402, 16435, 16465, 16493, 
16525, 16555, 16584, 16616, 16647, 16678, 16708, 16738, 16769, 
16800, 16829, 16860, 16891, 16920, 16952, 16982, 17011, 17044, 
17074, 17105, 14638, 14666, 14699, 14729, 14757, 14790, 14820, 
14852, 14882, 14911, 14943, 14974, 15005, 15033, 15064, 15093, 
15125, 15155, 15184, 15217, 15247, 15278, 15308, 15338, 15370, 
15399, 15429, 15460, 15491, 15520, 15552, 15583, 15611, 15644, 
15674, 15705, 15736, 15764, 15792, 15825, 15856, 15884, 15917, 
15947, 15978, 16009, 16038, 16070, 16101, 16129, 16160, 16190, 
16220, 16251, 16282, 16311, 16343, 16374, 16402, 16435, 16465, 
16493, 16525, 16555, 16584, 16616, 16647, 16678, 16708, 16738, 
16769, 16800, 16829, 16860, 16891, 16920, 16952, 16982, 17011, 
17044, 17074, 17105, 17135, 17165, 17197, 17225, 17256, 17284, 
17317, 17347, 17378, 17409, 17438, 17470, 17500, 17529, 17562, 
17590, 17619, 17651, 17682, 17711, 17743, 17774, 17802, 17835, 
17865, 17896, 14638, 14666, 14699, 14729, 14757, 14790, 14820, 
14852, 14882, 14911, 14943, 14974, 15005, 15033, 15064, 15093, 
15125, 15155, 15184, 15217, 15247, 15278, 15308, 15338, 15370, 
15399, 15429, 15460, 15491, 15520, 15552, 15583, 15611, 15644, 
15674, 15705, 15736, 15764, 15792, 15825, 15856, 15884, 15917, 
15947, 15978, 16009, 16038, 16070, 16101, 16129, 16160, 16190, 
16220, 16251, 16282, 16311, 16343, 16374, 16402, 16435, 16465, 
16493, 16525, 16555, 16584, 16616, 16647, 16678, 16708, 16738, 
16769, 16800, 16829, 16860, 16891, 16920, 16952, 16982, 17011, 
17044, 17074, 17105, 17135, 17165, 17197, 17225, 17256, 17284, 
17317, 17347, 17378, 17409, 17438, 17470, 17500, 17529, 17562, 
17590, 17619, 17651, 17682, 17711, 17743, 17774, 17802, 17835, 
17865, 17896, 14638, 14666, 14699, 14729, 14757, 14790, 14820, 
14852, 14882, 14911, 14943, 14974, 15005, 15033, 15064, 15093, 
15125, 15155, 15184, 15217, 15247, 15278, 15308, 15338, 15370, 
15399, 15429, 15460, 15491, 15520, 15552, 15583, 15611, 15644, 
15674, 15705, 15736, 15764, 15792, 15825, 15856, 15884, 15917, 
15947, 15978, 16009, 16038, 16070, 16101, 16129, 16160, 16190, 
16220, 16251, 16282, 16282, 16311, 16343, 16374, 16402, 16435, 
16465, 16493, 16525, 16555, 16584, 16616, 16647, 16678, 16708, 
16738, 16769, 16800, 16829, 16860, 16891, 16920, 16952, 16982, 
17011, 17044, 17074, 17105, 17135, 17165, 17197, 17225, 17256, 
17284, 17317, 17347, 17378, 17409, 17438, 17470, 17500, 17529, 
17562, 17590, 17619, 17651, 17682, 17711, 17743, 17774, 17802, 
17835, 17865, 17896), class = "Date"), TICKER = c("AMRE", "AMRE", 
"AMRE", "AMRE", "AMRE", "AMRE", "AMRE", "AMRE", "AMRE", "AMRE", 
"AMRE", "AMRE", "AMRE", "AMRE", "AMRE", "AMRE", "AMRE", "AMRE", 
"AMRE", "AMRE", "AMRE", "AMRE", "AMRE", "AMRE", "AMRE", "AMRE", 
"AMRE", "AMRE", "AMRE", "AMRE", "AMRE", "AMRE", "AMRE", "AA", 
"AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", 
"AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", 
"AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", 
"AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", 
"AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", 
"AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", 
"AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", 
"AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", 
"AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", 
"AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "CHE", "CHE", 
"CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", 
"CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", 
"CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", 
"CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", 
"CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", 
"CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", 
"CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", 
"CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", 
"CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", 
"CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", 
"CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", 
"CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "CHE", "MLR", "MLR", 
"MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", 
"MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", 
"MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", 
"MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", 
"MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", 
"MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", 
"MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", 
"MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", 
"MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", 
"MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", 
"MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", 
"MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "MLR", "UMC", "UMC", 
"UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", 
"UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", 
"UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", 
"UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", 
"UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", 
"UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", 
"UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", 
"UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", 
"UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", 
"UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", 
"UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", 
"UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC", "UMC"), RET = c("C", 
"0.029099", "0.035862", "0.099190", "0.014119", "0.050242", "0.025656", 
"-0.016487", "0.136416", "-0.023124", "0.045765", "-0.017103", 
"-0.054292", "-0.077638", "0.040308", "0.014409", "-0.010795", 
"-0.023550", "-0.030952", "0.065111", "-0.032872", "0.005432", 
"0.066627", "0.041080", "0.264481", "0.006914", "-0.005579", 
"0.072704", "0.080763", "0.004131", "0.001507", "", "", "C", 
"-0.030721", "0.298077", "-0.051029", "-0.005493", "-0.019477", 
"-0.023421", "-0.008804", "0.114855", "0.205494", "0.062443", 
"0.024882", "-0.131226", "0.297760", "-0.034342", "-0.135525", 
"-0.000222", "0.138790", "-0.061133", "-0.024756", "-0.077005", 
"0.032355", "-0.095590", "-0.133911", "-0.090883", "-0.164414", 
"-0.210298", "0.047133", "0.070677", "-0.056882", "-0.131050", 
"-0.135739", "0.110338", "-0.082587", "0.185221", "0.085054", 
"0.001142", "0.172571", "0.076673", "0.018709", "0.048071", "-0.037373", 
"-0.009412", "-0.056514", "-0.071248", "-0.128988", "-0.252344", 
"0.124347", "-0.065985", "-0.136727", "0.174567", "0.003937", 
"-0.014749", "-0.028942", "-0.118191", "0.023392", "-0.032000", 
"0.014168", "0.034463", "-0.028797", "-0.018670", "0.032105", 
"0.018433", "-0.032805", "0.000000", "-0.002347", "0.003529", 
"-0.080000", "0.016624", "-0.027673", "0.054545", "0.141626", 
"0.039914", "0.106139", "0.082785", "0.022589", "0.096252", "0.046620", 
"0.012621", "0.094049", "0.100739", "0.015253", "-0.031306", 
"0.041641", "0.033413", "-0.086755", "-0.008866", "-0.053035", 
"-0.126437", "0.038700", "-0.066319", "-0.108000", "-0.114798", 
"-0.039514", "0.022222", "-0.075569", "0.051512", "0.054487", 
"-0.261398", "0.229081", "0.072788", "0.165971", "-0.167413", 
"0.000000", "0.145631", "-0.048023", "0.005952", "-0.055884", 
"-0.030644", "0.154409", "0.015310", "0.011585", "0.036721", 
"-0.039888", "-0.031479", "-0.054422", "0.141683", "0.034580", 
"0.036308", "0.042173", "-0.020154", "0.053833", "0.017879", 
"0.045338", "-0.027574", "-0.030339", "-0.071886", "-0.042756", 
"-0.053230", "0.080058", "-0.093329", "-0.045658", "0.096270", 
"0.104026", "0.013911", "-0.037332", "-0.076732", "0.088029", 
"0.038551", "0.054803", "0.049372", "-0.029441", "0.015019", 
"0.007491", "0.101473", "0.024090", "0.036145", "0.020505", "-0.139917", 
"0.034419", "-0.025404", "-0.010625", "0.026709", "-0.051469", 
"0.152020", "-0.016810", "0.030018", "0.074506", "0.057329", 
"-0.069089", "0.060166", "0.064033", "0.086748", "0.039077", 
"-0.025660", "0.004470", "0.067434", "-0.040323", "-0.042869", 
"0.153846", "0.025069", "-0.034757", "0.079479", "0.055641", 
"0.132418", "-0.079954", "-0.021122", "0.178467", "-0.016276", 
"-0.030358", "-0.063284", "-0.082526", "0.054086", "-0.041860", 
"0.006704", "0.045242", "0.079451", "-0.081215", "0.045505", 
"0.002481", "0.055226", "0.076794", "0.035409", "0.076585", "0.023187", 
"0.102304", "0.017579", "-0.000635", "-0.034371", "0.000354", 
"0.024127", "0.105815", "0.102001", "-0.011873", "0.072216", 
"-0.002533", "0.050957", "0.129590", "0.058595", "-0.012853", 
"-0.017961", "0.024713", "-0.012240", "-0.047719", "0.041895", 
"-0.105752", "-0.012335", "0.052632", "0.061864", "0.150442", 
"0.048951", "-0.102000", "-0.007424", "-0.077038", "0.096434", 
"-0.005174", "0.041605", "0.014979", "0.072382", "0.089122", 
"-0.015644", "-0.025862", "0.094817", "0.086628", "-0.123596", 
"0.193529", "-0.107051", "0.178098", "-0.212818", "-0.014916", 
"0.036872", "-0.028817", "0.076389", "-0.030733", "-0.114634", 
"0.106061", "0.030760", "-0.065773", "0.054759", "-0.043614", 
"-0.068404", "0.075524", "0.001967", "0.041885", "0.016960", 
"-0.058567", "0.083389", "-0.051924", "0.078674", "-0.034358", 
"0.068664", "0.103651", "0.014941", "-0.013144", "-0.015566", 
"-0.015812", "0.090305", "-0.008193", "0.048529", "0.020679", 
"-0.067541", "-0.014070", "-0.098837", "0.169823", "-0.093576", 
"0.168527", "-0.028379", "0.097030", "0.112816", "-0.086531", 
"-0.083557", "-0.019503", "-0.122306", "0.238721", "-0.091747", 
"0.160696", "-0.032187", "-0.000456", "-0.013315", "-0.099116", 
"0.056302", "0.048323", "0.004704", "-0.028090", "0.042253", 
"0.030289", "0.038444", "-0.036858", "0.161731", "0.043922", 
"0.001890", "-0.056604", "0.061200", "-0.036053", "0.007874", 
"-0.022266", "0.050302", "-0.038314", "0.120717", "0.010733", 
"-0.012389", "-0.068817", "0.009690", "-0.065259", "0.034086", 
"-0.010000", "0.076768", "-0.034522", "0.019569", "0.105566", 
"-0.059722", "-0.101487", "0.168391", "-0.037776", "-0.095361", 
"-0.022792", "0.096210", "-0.055851", "-0.067606", "-0.120846", 
"0.068086", "-0.151815", "0.081712", "0.111511", "-0.077670", 
"0.108772", "0.006329", "-0.119497", "-0.025000", "0.040293", 
"-0.042253", "-0.058824", "-0.026072", "-0.134783", "-0.040201", 
"0.167539", "0.026906", "-0.065502", "0.266355", "0.003690", 
"-0.099265", "0.093878", "-0.212687", "0.028436", "0.038568", 
"-0.064516", "0.009852", "-0.082927", "0.015957", "0.041885", 
"-0.015075", "-0.056122", "-0.027027", "0.050000", "0.148148", 
"0.073733", "-0.026732", "-0.109091", "0.051020", "-0.004854", 
"-0.019512", "0.014925", "-0.009804", "-0.004950", "0.034826", 
"0.048077", "0.055046", "0.047826", "-0.056703", "-0.056703", 
"0.013699", "-0.103604", "0.100503", "-0.013699", "0.050926", 
"0.048458", "0.054622", "-0.027888", "-0.008197", "-0.070248", 
"-0.088889", "-0.078670", "-0.094444", "-0.006135", "0.141975", 
"0.000000", "0.016216", "0.042553", "0.056122", "0.004831", "-0.091346", 
"-0.005291", "0.058511", "-0.006194", "-0.015873", "-0.005376", 
"0.027027", "-0.042105", "-0.038462", "0.034286", "0.127072", 
"-0.053922", "0.005181", "0.061856", "0.184466", "-0.039865", 
"0.106195", "0.000000", "0.040000", "-0.019231", "-0.062745", 
"0.020920", "-0.012295", "0.074689", "0.030888", "0.041198", 
"0.014388", "0.034730", "-0.003571", "-0.075269", "-0.271318", 
"-0.031915", "-0.016484")), class = "data.frame", row.names = c(NA, 
-466L))

【问题讨论】:

    标签: r pivot tidyr


    【解决方案1】:

    如果我们在 'id_cols' 中提供列,它就会出现

    library(dplyr)
    library(tidyr)
    out <- df %>% 
              group_by(TICKER, year = lubridate::year(date)) %>% 
              mutate(row_id_for_pivot = row_number()) %>%
              pivot_wider(names_from = TICKER, values_from = RET,
                  id_cols = c(date, row_id_for_pivot))
    out
    # A tibble: 113 x 5
    #   date       row_id_for_pivot JEQ       RLH       PMC      
    #   <date>                <int> <chr>     <chr>     <chr>    
    # 1 2010-01-29                1 0.007634  0.200405  0.025189 
    # 2 2010-02-26                2 0.041667  0.065767  0.053440 
    # 3 2010-03-31                3 0.060000  0.142405  0.062391 
    # 4 2010-04-30                4 0.012007  0.058172  0.059276 
    # 5 2010-05-28                5 -0.113559 -0.137435 -0.150259
    # 6 2010-06-30                6 -0.034417 -0.094082 -0.106098
    # 7 2010-07-30                7 0.041584  0.247906  -0.109140
    # 8 2010-08-31                8 -0.013308 -0.161074 -0.405819
    # 9 2010-09-30                9 0.042389  0.190400  0.228093 
    #10 2010-10-29               10 0.005545  0.057796  0.053515 
    # … with 103 more rows
    

    -检查计数

    count(out, row_id_for_pivot)
    # A tibble: 13 x 2
    #   row_id_for_pivot     n
    #              <int> <int>
    # 1                1     9
    # 2                2     9
    # 3                3     9
    # 4                4     9
    # 5                5     9
    # 6                6     9
    # 7                7     9
    # 8                8     9
    # 9                9     9
    #10               10     9
    #11               11     9
    #12               12     9
    #13               13     5
    

    还有 OP 的编辑中显示的问题

    out %>%
       filter(date == "2015-01-30")
    # A tibble: 1 x 5
    #    date       row_id_for_pivot JEQ      RLH      PMC     
    #   <date>                <int> <chr>    <chr>    <chr>   
    #1 2015-01-30                1 0.048449 0.012618 0.111058
    

    更新

    基于新的数据集,我们可以先将'RET'列转换为numeric有一个类将'C'更改为NA,然后在pivot_wider这一步之后,按'date'分组,@ 987654326@选择第一个非NA元素的列

    out1 <- df3 %>% 
                mutate(RET = as.numeric(RET)) %>% 
                group_by(TICKER, year = lubridate::year(date)) %>% 
                mutate(row_id_for_pivot = row_number()) %>%
               pivot_wider(names_from = TICKER, values_from = RET,
                   id_cols = c(date, row_id_for_pivot)) %>%
               select(-row_id_for_pivot) %>%
               group_by(date) %>% 
               summarise_at(vars(-group_cols()), ~ .[order(is.na(.))][1])
    

    警告是在as.numeric 步骤中将非数字元素转换为NA

    out1 %>%
       filter(date == "2012-07-31")
    # A tibble: 1 x 6
    #  date        AMRE     AA    CHE    MLR    UMC
    # <date>     <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
    #1 2012-07-31    NA -0.032 0.0386 0.0308 0.0386
    

    注意:c(...) 中的列可以不加引号

    【讨论】:

    • 谢谢,我认为这行得通,但是当我运行 df %&gt;% select(-row_id_for_pivot) %&gt;% arrange(date) 时,我得到了一些奇怪的结果 - 重复了 date 列。
    • 我有点困惑,因为日期从“2010-01-29”到“2018-12-31”,即整整 9 年 107/108 个月。但是pivot_wider 创造了 161 个月。
    • pivot_wider 之后,我希望每个日期都有一次观察。运行 pivot_wider 代码后,我运行 x1 %&gt;% filter(date == "2015-01-30") 并得到 2 个结果。
    • 我认为这可以解决问题,谢谢!我仍然得到一个重复的“2018-12-31”,但我认为这是因为我有一个重复的结果 JEQ
    • 在编辑 2 下,我添加了一些关于我在完整数据上遇到的一些问题的更多解释。我还添加了新数据来复制它。
    猜你喜欢
    • 2013-10-15
    • 2022-11-05
    • 1970-01-01
    • 2018-08-20
    • 2017-12-11
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多