将数据框转换为向量

3

I have a data frame like this:

COL1  COL2  COL3 

   a           h
   b     f    
   c     g       
   d           j

我想要以下输出结果:
 COL  
   a    
   b    
   c    
   d   
   f   
   g   
   h   
   j   

这该如何实现呢?提前致谢!
3个回答

9
如果你的数据框命名为dat,请尝试以下操作:
unlist(dat, use.names=FALSE)

您可能也想尝试以下操作:
as.character(unlist(dat, use.names=FALSE))
c(na.omit(as.character(unlist(dat, use.names=FALSE))))

如果您的数据是以因子形式输入的,则这可能会很有用。

另外,在您的问题中,您似乎并没有一个基本的“向量”,而是一个单列data.frame。因此,像dat2 <- data.frame(COL = c(na.omit(as.character(unlist(dat, use.names=FALSE)))))这样的内容可能是您正在寻找的。


4
do.call(c, your_data_frame)

一个例子:
> dat <- data.frame(a = 1:3, b = 2:4)
> do.call(c, dat)
a1 a2 a3 b1 b2 b3 
 1  2  3  2  3  4

这个操作将数据框的每一列都视为单独的输入,并将它们连接成一个向量。

嗨Dason。首先感谢你。我尝试了一下,但出现了以下错误:Error in do.call(c, dat) : 'what'必须是一个字符字符串或函数。 - Elb
@Bnf8,听起来你在某个地方使用了c作为变量名。尝试使用do.call(base::c, your_data_frame) - Matthew Plourde
@JoshuaUlrich 好主意。而且很好地发现了重复的内容。 - Dason
@Dason:找到它很容易。只需简单搜索“[r] collapse column”。 - Joshua Ulrich
@JoshuaUlrich 简单还是不简单,找它还是个好主意。我可能应该养成寻找可能重复的习惯。 - Dason
1
@dason - 不,那么轻松的声望将从哪里获得? - Chase

3
你可以使用 `unlist` 函数:
dat <- data.frame(A1 = letters[1:3],
                  A2 = letters[2:4],
                  A3 = c("f", "a", "b"), stringsAsFactors = FALSE)

unlist(dat)

# A11 A12 A13 A21 A22 A23 A31 A32 A33 
# "a" "b" "c" "b" "c" "d" "f" "a" "b"

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