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"