数据框中的数字值

时间:2017-07-10 12:32:57

标签: r dataframe

我有以下数据框,用于调用p.inits列中所有值的函数,并使用cols中的相应颜色绘制它们。

p.inits = c(0.5, 0.1, 0.9)
cols = c("red", "green", "blue")
data = data.frame(cbind(p.inits, cols))

foo = function (x) { print(1:x) }

for (i in 1:nrow(data)) {
  print(data$p.inits[i]
}

函数foo表明某些东西没有按照我预期的方式工作,因为输出是:

[1] 1 2
[1] 1
[1] 1 2 3

另外,p.inits评估为[1] 0.5 0.1 0.9,而data$p.inits评估为此因素:

[1] 0.5 0.1 0.9
Levels: 0.1 0.5 0.9

我的问题是:上帝的绿色地球正在发生什么?为什么列p.inits不是数字?我只想访问值0.5, 0.1, 0.9

as.numeric(as.vector(data$p.inits))可以解决问题,但这看起来非常复杂。这真的是正确的方法吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

最好只使用data.frame调用创建data.frame,而不是使用matrix转换为cbind然后转换为data.frame。问题是matrix如何存储元素,因为class中通常只允许一个matrix。这里有一个character列,因此我们将所有元素都转换为character。当我们转换为data.frame时,默认选项stringsAsFactors = TRUE会将character类转换为factor,这就是我们所有factor类的原因。

data <- data.frame(p.inits, cols)

应该是

的方式

如果我们不需要factor课程

data <- data.frame(p.inits, cols, stringsAsFactors= FALSE)