如何使用索引用 dplyr 重组非常宽的数据帧?

How to restructure very wide dataframes with dplyr using an index?

我在 gather 上阅读了很多帖子,但我正在努力创建一个解决方案,将不同宽度的文件重组为长格式。

我的数据在这里:

library(RCurl)
x <- getURL("https://raw.githubusercontent.com/bac3917/Cauldron/master/jazz.csv")
df2 <- read.csv(text = x)

在上面的例子中,我有一组 3 列,每列都需要堆叠起来。我尝试了以下方法,但我的值分散到错误的列中:

longJazz<- df2 %>% gather(key,
              value,
              X1:X69)

生成的数据框应该有 782 行和 3 列(标题、年份和艺术家)。

在另一种情况下,我有一组 5 列,所以我想要一个可以简单调整的解决方案。例如,一个将数据框和每组列数作为参数的函数会很方便。

我们可以删除第一列 'X',然后按照 'Details'、'year'、[= 的顺序重命名列,直到最后一列 'id' 19=],然后使用 tidyr 中的 pivot_longer 重塑为 'long' 格式

library(stringr)
library(dplyr)
library(readr)
library(tidyr)
df2 <- df2[-1]
i1 <- as.integer(gl(ncol(df2)-1, 3, ncol(df2)-1))

names(df2)[1:69] <- str_c(c("Details", "year", "Description"), i1, sep="_") 


df2 %>% 
    mutate_at(vars(starts_with('year')), ~ as.integer(as.character(.))) %>%  
    pivot_longer(cols = -id, names_sep="_", names_to = c(".value", "group")) %>%
    select(-group)
# A tibble: 1,150 x 4
#      id Details                                                  year Description                                                                        
#   <int> <fct>                                                   <int> <fct>                                                                              
# 1     1 Sophisticated Lady / Tea For Two                         1933 Art Tatum                                                                          
# 2     1 The Genius Of Art Tatum, No. 21                          1955 Art Tatum                                                                          
# 3     1 The Tatum Group Masterpieces, Vol. 5                     1964 Art Tatum / Lionel Hampton / Harry Edison / Buddy Rich / Red Callender / Barney Ke…
# 4     1 Live Sessions 1940 / 1941                                1975 Art Tatum                                                                          
# 5     1 20th Century Piano Genius                                1986 Art Tatum                                                                          
# 6     1 Jazz Masters (100 Ans De Jazz)                           1998 Art Tatum                                                                          
# 7     1 The Art Tatum - Ben Webster Quartet                      2015 Art Tatum / Ben Webster                                                            
# 8     1 El Gran Tatum                                              NA Art Tatum                                                                          
# 9     1 Sweet Georgia Brown / Shiek Of Araby / Back O' Town Bl…  1945 Benny Goodman Quintet* / Esquire All Stars Featuring Louis Armstrong               
#10     1 The Immortal Live Sessions 1944/1947                     1975 Louis Armstrong                                                                    
# … with 1,140 more rows