我在重组数据时遇到问题。我有两列,我想用这些列做的是将它们堆叠在它们的原始行下面,使得第一行第一列位于第一行第二列的顶部,第二列第一列,它位于顶部第二排第二列 - 依此类推。在R形式中,它看起来像这样:
C1 C2
1 2
1 2
1 2
我希望它看起来像这样
C3
1
2
1
2
1
2
答案 0 :(得分:3)
您可以对数据集进行转置,即。 t(df)
交换列的行,输出将是matrix
(即具有维度属性的向量)。要剥离维度并创建实数向量,可以使用as.vector
或简单c
(连接)。这可用于创建单个列data.frame
:
data.frame(C3 = c(t(df)))
使用mapply
的其他选项(由@David Arenburg提供)。在这里,这个想法再次逐个元素地逐列连接" C1"和" C2"。
data.frame(C3 = c(mapply(c, df$C1, df$C2)))
要查看其工作原理,请尝试Map
。此处,list
元素的数量将等于nrow
的{{1}}:
df
Map(`c`, df$C1, df$C2)
以下是矢量化方法与df <- structure(list(C1 = c(1L, 1L, 1L), C2 = c(2L, 2L, 2L)), .Names = c("C1",
"C2"), class = "data.frame", row.names = c(NA, -3L))
家庭
*apply
答案 1 :(得分:0)
我想知道这会如何表现:
matrix( data.matrix(df), ncol=1, byrow=TRUE)
但它仍然比akrun慢。