r语言 - 如何重塑多行单行与几列



对于有reshape包实践的人来说,这似乎是一个明显的问题,但我正试图使用它的函数,我无法找出正确的语法!

让我们有下面的数据帧

df <- data.frame(matrix(1:12,ncol=3),row.names=letters[1:4])
  X1 X2 X3
a  1  5  9
b  2  6 10
c  3  7 11
d  4  8 12

我们如何将行绑定到列中以获得以下结果?

  X1.a X2.a X3.a X1.b X2.b X3.b X1.c X2.c X3.c X1.d X2.d X3.d
     1    5    9    2    6   10    3    7   11    4    8   12

谢谢

这个也可以:

vec <- c(t(df))
names(vec) <- c(outer(colnames(df), rownames(df), paste, sep="."))
## > vec
## X1.a X2.a X3.a X1.b X2.b X3.b X1.c X2.c X3.c X1.d X2.d X3.d 
##    1    5    9    2    6   10    3    7   11    4    8   12 

由于您希望它作为一个矢量,因此不需要使用reshape。您可以只使用unlist,然后使用setNames来设置相应的名称。

df.t <- as.data.frame(t(df))
vec <- unlist(df.t, use.names=FALSE) # gives a vector not matrix/data.frame
vec.names <- do.call(paste, c(expand.grid(rownames(df.t), colnames(df.t)), sep="."))
vec <- setNames(vec, vec.names)
# X1.a X2.a X3.a X1.b X2.b X3.b X1.c X2.c X3.c X1.d X2.d X3.d 
#    1    5    9    2    6   10    3    7   11    4    8   12 

这里有一个:

m <- melt(cbind(df, rn=rownames(df)), id.vars='rn')
cast(m, ~ rn + variable)
##   value a_X1 a_X2 a_X3 b_X1 b_X2 b_X3 c_X1 c_X2 c_X3 d_X1 d_X2 d_X3
## 1 (all)    1    5    9    2    6   10    3    7   11    4    8   12

或者如Arun所示,acast给出一个矩阵(没有额外的value列):

acast(m, . ~ variable+rn)
##      X1_a X1_b X1_c X1_d X2_a X2_b X2_c X2_d X3_a X3_b X3_c X3_d
## [1,]    1    2    3    4    5    6    7    8    9   10   11   12

(注意,由于公式被翻转,排列顺序是相反的)

相关内容

  • 没有找到相关文章

最新更新