将两列合并为一列,删除同名

时间:2014-07-11 09:04:25

标签: r merge

我有一张表:

a
 n_msi2010 n_msi2011
1 -0.122876  1.818750
2  1.328930  0.931426
3 -0.111653  4.400060
4  1.222900  4.500450
5  3.604160  6.110930

我想将这两列合并为一列以获取(我不想保留列名):

a
  n_msi2010 
1 -0.122876  
2  1.328930  
3 -0.111653  
4  1.222900  
5  3.604160  
6  1.818750
7  0.931426
8  4.400060
9  4.500450
10 6.110930

当我使用

等预制数据时
x <- cbind(c(1, 2, 3), c(4, 5, 6))
colnames(x)<-c("a","b")
c(t(x))
# 1 4 2 5 3 6
c((x))
# 1 2 3 4 5 6

列合并工作正常。仅限于&#34; a&#34;例如,id不起作用,它创建了2个单独的向量。我真的不明白为什么。有帮助吗?感谢

2 个答案:

答案 0 :(得分:1)

似乎您的问题是关于从data.frame创建列与行顺序向量。

t()上使用data.frame会将data.frame转换为matrix,并使用c()上的matrix删除其尺寸。< / p>

有了这些知识,你可以尝试:

# create a vector of values, column by column
c(as.matrix(a))  # you are missing the `as.matrix` in your current approach

# create a vector of values, row by row
c(t(a))          # you already know this works

获取“逐列”结果的其他方法是:

unlist(a, use.names = FALSE)
stack(a)[, "values"]     # add `drop = FALSE` if you want to retain a data.frame

答案 1 :(得分:0)

不是一种优雅的方式,但它似乎可以将两个或多个列合并为一个。

n_msi2010 <- 1:5
n_msi2011 <- 6:10
a <- data.frame(n_msi2010, n_msi2011)

vector <- vector()

for (i in 1:dim(a)[2]){
    vector <- append(vector, as.vector(a[,i]))
    vector  
}

你可以做

as.matrix(vector) or data.frame(vector)