Переформатирование фрейма данных в R

#r #dataframe #dplyr #reshape

Вопрос:

У меня есть DF вот так:

   (Intercept)        W          Q
1  0.09282078 2.370789 -0.2478352
2  0.11608078 1.890222 -0.3134176
3  0.09899802 1.764213 -0.1406203
 

как я могу переформатировать его, dplyr чтобы он выглядел так:

 Feature      coeff
1_intercept  0.09282078
1_W          2.370789
1_Q          -0.2478352
2_intercept  0.11608078
2_W          1.890222
2_Q          -0.3134176
3_intercept  0.09899802
3_W          1.764213
3_Q          -0.1406203
 

Ответ №1:

С tidyverse помощью , мы можем сделать

 library(dplyr)
library(tidyr)
df1 %>%
    as.data.frame %>%
    mutate(rn = row_number()) %>%
    pivot_longer(cols = -rn, names_to = 'Feature', values_to = 'coeff') %>%
    unite(Feature, rn, Feature, sep= "_")
 

Ответ №2:

Ниже приведена моя базовая попытка R

 transform(
  setNames(rev(stack(df)),c("Feature","coeff")),
  Feature = paste0(ave(seq_along(Feature), Feature, FUN = seq_along), "_", Feature)
)[order(rep(seq(ncol(df)),nrow(df))),]
 

что дает

         Feature       coeff
1 1_(Intercept)  0.09282078
4           1_W  2.37078900
7           1_Q -0.24783520
2 2_(Intercept)  0.11608078
5           2_W  1.89022200
8           2_Q -0.31341760
3 3_(Intercept)  0.09899802
6           3_W  1.76421300
9           3_Q -0.14062030