簡體   English   中英

R 中的 Dplyr - 具有多列 R 的 Pivot_wider

[英]Dplyr in R - Pivot_wider with multiple columns R

我正在嘗試重新排序我的數據集。 它目前看起來像這樣:

Grey.Reef.Shark    Silvertip.Shark monthyear   KUD
     0.01536934     0.006169693      2014/01   50
     0.07434824     0.067793605      2014/01   95
     0.01577231     0.009832403      2014/02   50
     0.07184520     0.092637823      2014/02   95

我希望它看起來像這樣:

   50             95         monthyear         species
0.01536934    0.07434824      2014/01       Grey.Reef.Shark
0.006169693   0.067793605     2014/01       Silvertip.Shark
0.01577231    0.07184520      2014/02       Grey.Reef.Shark
0.009832403   0.092637823     2014/02       Silvertip.Shark

我認為您可以使用 dplyr pivot_wider中的 tidyverse pivot_wider 來做到這一點,但我正在努力讓它發揮作用。

可以在下面找到可重現的數據集。

structure(list(Grey.Reef.Shark = c(0.0153693415007032, 0.0743482431216283, 
0.0157723122886768, 0.0718452019326124, 0.0271587991640831, 0.139118848810864
), Silvertip.Shark = c(0.00616969268071902, 0.0677936053733444, 
0.00983240322136223, 0.0926378231217502, 0.0484117524071891, 
0.235938189749556), monthyear = c("2014/01", "2014/01", "2014/02", 
"2014/02", "2014/03", "2014/03"), KUD = structure(c(1L, 2L, 1L, 
2L, 1L, 2L), levels = c("50", "95"), class = "factor")), row.names = c("50", 
"95", "501", "951", "502", "952"), class = "data.frame")

我們可以使用values_from中的多個列作為列名或列索引的向量

library(tidyr)
pivot_wider(df1, names_from = KUD, values_from = names(df1)[1:2], names_sep = ".")

-輸出

# A tibble: 3 × 5
  monthyear Grey.Reef.Shark.50 Grey.Reef.Shark.95 Silvertip.Shark.50 Silvertip.Shark.95
  <chr>                  <dbl>              <dbl>              <dbl>              <dbl>
1 2014/01               0.0154             0.0743            0.00617             0.0678
2 2014/02               0.0158             0.0718            0.00983             0.0926
3 2014/03               0.0272             0.139             0.0484              0.236 

對於更新的格式,使用pivot_wider重塑為“long”,然后使用pivot_longer重塑回“wide”

library(dplyr)
df1 %>%
   pivot_longer(cols = ends_with("Shark"), names_to = 'species') %>% 
   pivot_wider(names_from = KUD, values_from = value)

-輸出

# A tibble: 6 × 4
  monthyear species            `50`   `95`
  <chr>     <chr>             <dbl>  <dbl>
1 2014/01   Grey.Reef.Shark 0.0154  0.0743
2 2014/01   Silvertip.Shark 0.00617 0.0678
3 2014/02   Grey.Reef.Shark 0.0158  0.0718
4 2014/02   Silvertip.Shark 0.00983 0.0926
5 2014/03   Grey.Reef.Shark 0.0272  0.139 
6 2014/03   Silvertip.Shark 0.0484  0.236 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM