提问人:Brani 提问时间:3/30/2010 最后编辑:zx8754Brani 更新时间:7/31/2019 访问量:208218
将数据帧转换为向量(按行)
Convert a dataframe to a vector (by rows)
问:
我有一个带有数字条目的数据帧,如下所示
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, ])
}
答:
11赞
doug
3/30/2010
#1
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
评论
1赞
Brani
3/30/2010
是的,顺序很重要,我想要按行转换。而且行数超过 3 行。因此,如果您可以将其转换为循环或使用矢量化函数,那就更好了。谢谢。
165赞
teucer
3/30/2010
#2
你可以试试。请注意,如果要按列进行操作,则应使用.as.vector(t(test))
unlist(test)
评论
1赞
verystrongjoe
8/30/2016
我无法理解此解决方法。可以给出更多的解释吗?@teucer
6赞
teucer
8/31/2016
@verystrongjoe这里发生了两件事:1) t 隐式地将 data.frame 转换为矩阵,2) 矩阵只是一个具有 dim 属性的特殊向量,as.vector 或 c 将其删除
3赞
citynorman
11/30/2016
我不得不使用as.numeric(t(df))
1赞
4/15/2020
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)))
3赞
Wilinthon Bogoya Forero
7/3/2019
#3
您可以尝试以下方法来获得您的组合:
as.numeric(rbind(test$x, test$y))
这将返回:
26, 34, 21, 29, 20, 28
上一个:如何从多个向量中找到共同元素?
下一个:计算向量中具有 x 值的元素数
评论