我有一个数据框,例如:
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"
这是我能想到的唯一解决方案,但我假设必须有更好的方法来做到这一点:
class(aframe['a2']) [1] "data.frame" avector = c() for(atmp in aframe['a2']) { avector <- atmp } class(avector) [1] "numeric"
注意: 我上面的词汇可能有问题,如果有,请纠正我。我仍在学习 R 的世界。此外,对这里发生的事情的任何解释都值得赞赏(即与 Python 或其他语言有关的任何解释都会有所帮助!)
我将尝试在不犯任何错误的情况下解释这一点,但我打赌这将在评论中引起一两个澄清。
数据框是一个列表。当您使用列的名称和 对数据框进行子集化时[,您将得到一个 子列表 (或子数据框)。如果您想要实际的原子列,您可以使用[[,或者(对我而言)有些混乱,您可以这样做aframe[,2],它返回一个向量,而不是一个子列表。
[
[[
aframe[,2]
所以尝试运行这个序列,也许事情会更清楚:
avector <- as.vector(aframe['a2']) class(avector) avector <- aframe[['a2']] class(avector) avector <- aframe[,2] class(avector)