在R中将两个向量按行合并

9

我有一个数据框,其中有几列我想要在新的数据框中合并成一列。

df1 <- data.frame(col1 = 1:3, col2 = 4:6, col3 = 7:9)

我应该如何创建一个新的数据框,其中只有一列是1到9?


2
标题与描述不太匹配... - Konrad Rudolph
7
调用reshape2包,使用melt()函数对数据框df1进行“融合”操作。 - Rorschach
6个回答

9

由于data.frame本质上是列的列表,因此unlist(df1)将为您提供所有值的一个大向量。现在,您可以从中简单地构建一个新的data.frame

data.frame(col = unlist(df1))

6
如果您也需要一个指示器:
stack(df1)
#   values  ind
# 1      1 col1
# 2      2 col1
# 3      3 col1
# 4      4 col2
# 5      5 col2
# 6      6 col2
# 7      7 col3
# 8      8 col3
# 9      9 col3

6

为了提供一套完整的操作方式,这里是 tidyr 的方法。

library(tidyr)
gather(df1)
   key value
1 col1     1
2 col1     2
3 col1     3
4 col2     4
5 col2     5
6 col2     6
7 col3     7
8 col3     8
9 col3     9

6

再介绍一个使用c函数的方法:

data.frame(col11 = c(df1,recursive=TRUE))
      col11
col11   1
col12   2
col13   3
col21   4
col22   5
col23   6
col31   7
col32   8
col33   9

5
您可以尝试以下方法:
as.data.frame(as.vector(as.matrix(df1)))
#  as.vector(as.matrix(df1))
#1                         1
#2                         2
#3                         3
#4                         4
#5                         5
#6                         6
#7                         7
#8                         8
#9                         9

2

另一种方法,仅适用于使用Reduce的情况...

data.frame(Reduce(c, df1))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接