Изменение формы данных в R

#r #stack #dataframe #reshape

#r #стек #фрейм данных #изменение формы

Вопрос:

Я хочу изменить форму фрейма данных, и у меня проблемы с документацией по функциям reshape и stack. Мой фрейм данных выглядит следующим образом:

 x<-rnorm(n=20, mean=0, sd=1)
y<-rnorm(n=20, mean=10, sd=1)
fact<-rep(1:5, times=4)
df<-data.frame(x,y,fact)
  

В конце я хочу, чтобы фрейм данных с двумя столбцами (40×2), один столбец с x и y ‘stacked’ и один столбец с соответствующим коэффициентом x amp; y

Ответ №1:

Одна строка с melt

 reshape2::melt(df, id = 'fact', variable.name = 'xy')
  

Ответ №2:

Я не уверен, хотели ли вы сохранить информацию о том, откуда были получены значения (т.е. столбцы x или y). Если вы этого не сделаете, то это легко:

 df2 <- data.frame(xy = c(df$x,df$y), fact=c(df$fact, df$fact))
  

Если вы хотите сохранить информацию в fact , то один из этих:

 ### Method 1
df2 <- data.frame(xy = c(df$x,df$y), 
                  fact=c(paste("x", df$fact, sep="."), paste("y", df$fact, sep=".") )
                  )
str(df2 )
'data.frame':   40 obs. of  2 variables:
 $ xy  : num  1.58043 -0.00399 0.84784 -0.10012 -0.27963 ...
 $ fact: Factor w/ 10 levels "x.1","x.2","x.3",..: 1 2 3 4 5 1 2 3 4 5 ...

### Method 2
 df2 <- stack(df[, 1:2])
 df2$fact=df$fact
 str(df2)
'data.frame':   40 obs. of  3 variables:
 $ values: num  1.58043 -0.00399 0.84784 -0.10012 -0.27963 ...
 $ ind   : Factor w/ 2 levels "x","y": 1 1 1 1 1 1 1 1 1 1 ...
 $ fact  : int  1 2 3 4 5 1 2 3 4 5 ...