将数据帧转换为向量(按行)


72

我有一个带有这样的数字条目的数据框

test <- data.frame(x = c(26, 21, 20), y = c(34, 29, 28))

如何获得以下向量?

> 26, 34, 21, 29, 20, 28

我可以使用以下方法获得它,但我想应该有一种更优雅的方法

X <- test[1, ]
for (i in 2:dim(test)[ 1 ]){
   X <- cbind(X, test[i, ])
   } 

Answers:


142

你可以试试看as.vector(t(test))。请注意,如果要按列进行操作,则应使用unlist(test)


我不明白这种解决方法。可以给出更多的解释吗?@teucer
verystrongjoe

6
@verystrongjoe这里发生了两件事:1)t将data.frame隐式转换为矩阵,2)矩阵只是具有dim属性的特殊矢量,而as.vector或c将其删除
teucer

2
我不得不使用as.numeric(t(df))
citynorman '16

1
unlist如果列具有不同的类,则不起作用。unlist(data.frame(a= 1:10, b= letters[1:10]))例如,参见。我最终使用了do.call("c", lapply(data.frame(a= 1:10, b= letters[1:10]), function(i) as.character(i)))
机器

9
c(df$x, df$y)
# returns: 26 21 20 34 29 28

如果特定顺序很重要,则:

M = as.matrix(df)
c(m[1,], c[2,], c[3,])
# returns 26 34 21 29 20 28 

或更笼统地说:

m = as.matrix(df)
q = c()
for (i in seq(1:nrow(m))){
  q = c(q, m[i,])
}

# returns 26 34 21 29 20 28

是的,顺序很重要,我想按行转换。并且行多于3。因此,最好将其转换为循环或使用矢量化函数。谢谢。
Brani 2010年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.