将3x3 data.frame转换为1x9 data.frame,同时保留行名和列名

时间:2015-07-14 20:31:26

标签: r data-manipulation

我无法为这个看似简单的数据操作问题找到一个优雅的解决方案。我可以看到一个循环解决方案,但我假设有一个1-2函数单行解决方案。

这就是我所拥有的:

x <- data.frame(c1=c(1,2,3),
                c2=c(4,5,6),
                c3=c(7,8,9),
                row.names = c("r1","r2","r3"))

> x
   c1 c2 c3
r1  1  4  7
r2  2  5  8
r3  3  6  9

这就是我想要的:

> y
     c1.r1 c1.r2 c1.r3 c2.r1 c2.r2 c2.r3 c3.r1 c3.r2 c3.r3
1    1     2     3     4     5     6     7     8     9

如何操纵x给我y

1 个答案:

答案 0 :(得分:4)

以下是一种方法:

protractor

R> unlist(lapply(x, setNames, rownames(x))) c1.r1 c1.r2 c1.r3 c2.r1 c2.r2 c2.r3 c3.r1 c3.r2 c3.r3 1 2 3 4 5 6 7 8 9 是一个列表,因此data.frame只会遍历列。然后,它将每个向量的名称设置为data.frame的lapply。然后rownames将列表展平为向量(递归,默认设置名称)。