如何友好的从数据框中取出向量?
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# a1 a2 a3# 1 1 6 11# 2 2 7 12# 3 3 8 13# 4 4 9 14# 5 5 10 15avector0 <- as.vector(aframe['a2'])class(avector)# [1] "data.frame"
问题是这样的,提问者想取出afrme中的第二列,但是尽管使用了as.vector得到的仍然是一个数据框。
于是有人回答:
A data frame is a list. When you subset a data frame using the name of a column and [, what you're getting is a sublist (or a sub data frame). If you want the actual atomic column, you could use [[, or somewhat confusingly (to me) you could do aframe[,2] which returns a vector, not a sublist.
avector1<- aframe[['a2']]class(avector1)# [1] "numeric"avector2<- aframe[,2]class(avector2)# [1] "numeric"avector3 <- aframe[,"a2"]class(avector3)# [1] "numeric"avector4 <- aframe$a2class(avector4)# [1] "numeric"
以上四种方式都是OK的,可是提问者还恰好用了不对的方式~ 哈哈哈
其实主要的问题在于操作符 [ 和 [[
我们可以使用
?'['?'[['?'[.data.frame'
另外注意,[中有一个drop(降维)参数
如果drop为T,则将数据框降维list....(蛋疼)
> avector <- as.vector(aframe['a2',,drop=TRUE])> class(avector)[1] "list
> avector <- as.vector(aframe['a2',drop=TRUE])Warning message:In `[.data.frame`(aframe, "a2", drop = TRUE) : 忽略'drop'参数> class(avector)[1] "data.frame"
> avector <- as.vector(aframe[,'a2',drop=F])> avectora21 62 73 84 95 10> class(avector)[1] "data.frame"
来自sf的这篇问答
http://stackoverflow.com/questions/7070173/r-friendly-way-to-convert-r-data-frame-column-to-a-vector
苍茫大海,旅鼠它来!


浙公网安备 33010602011771号