R友好的方式来将R data.frame列转换为向量?

我有一个数据框,如:

a1 = c(1, 2, 3, 4, 5) a2 = c(6, 7, 8, 9, 10) a3 = c(11, 12, 13, 14, 15) aframe = data.frame(a1, a2, a3) 

我尝试以下将其中一列转换为向量,但它不起作用:

 avector <- as.vector(aframe['a2']) class(avector) [1] "data.frame" 

这是我能想出的唯一的解决scheme,但我假设必须有一个更好的方法来做到这一点:

 class(aframe['a2']) [1] "data.frame" avector = c() for(atmp in aframe['a2']) { avector <- atmp } class(avector) [1] "numeric" 

注意:我上面的词汇可能不准确,所以请纠正我的错误。 我仍然在学习R的世界。另外,对这里发生的任何解释都是赞赏的(即关于Python或其他一些语言的帮助!)

我会试图解释这个,不会犯任何错误,但我敢打赌,这将在评论中吸引澄清或两个。

数据框是一个列表。 当你使用一个列的名字和[ ,你得到的是一个子列表 (或一个子数据框)的子集的数据框。 如果你想要实际的primefaces列,你可以使用[[或者对我有些困惑aframe[,2] ,你可以做aframe[,2] ,它返回一个向量,而不是一个子列表。

所以尝试运行这个序列,也许事情会更清楚:

 avector <- as.vector(aframe['a2']) class(avector) avector <- aframe[['a2']] class(avector) avector <- aframe[,2] class(avector) 

你可以使用$提取:

 class(aframe$a1) [1] "numeric" 

或双方括号:

 class(aframe[["a1"]]) [1] "numeric" 

你不需要as.vector() ,但你需要正确的索引: avector <- aframe[ , "a2"]

另一个要注意的是drop=FALSE选项为[

 R> aframe <- data.frame(a1=c1:5, a2=6:10, a3=11:15) R> aframe a1 a2 a3 1 1 6 11 2 2 7 12 3 3 8 13 4 4 9 14 5 5 10 15 R> avector <- aframe[, "a2"] R> avector [1] 6 7 8 9 10 R> avector <- aframe[, "a2", drop=FALSE] R> avector a2 1 6 2 7 3 8 4 9 5 10 R> 

如果你只是使用提取操作符,它将工作。 默认情况下,[]设置选项drop=TRUE ,这就是你想要的。 看?'['了解更多细节。

 > a1 = c(1, 2, 3, 4, 5) > a2 = c(6, 7, 8, 9, 10) > a3 = c(11, 12, 13, 14, 15) > aframe = data.frame(a1, a2, a3) > aframe[,'a2'] [1] 6 7 8 9 10 > class(aframe[,'a2']) [1] "numeric" 

使用'[''运算符的另一个优点是它可以同时处理data.frame和data.table。 所以如果函数必须同时运行data.frame和data.table,并且你想从中提取一个列作为一个向量,那么

 data[["column_name"]] 

是最好的。

 a1 = c(1, 2, 3, 4, 5) a2 = c(6, 7, 8, 9, 10) a3 = c(11, 12, 13, 14, 15) aframe = data.frame(a1, a2, a3) avector <- as.vector(aframe['a2']) avector<-unlist(avector) #this will return a vector of type "integer"