将data.frame更改为数组

时间:2012-08-10 00:16:20

标签: r

这是我的代码,是否有更简单的方法将虹膜更改为数组? 要求:当你改变它时,d [2,3] = iris [2,3] = 1.4

data(iris)
r=nrow(iris)
c=ncol(iris)
d=array(0,dim=c(r,c))
for (i in 1:r){
  for (j in 1:c){
      d[i,j]=iris[i,j]}}

1 个答案:

答案 0 :(得分:6)

这是一件非常不寻常的事情。

不,这比不寻常更糟糕。这可能只是坏事。如果所有数据都是单个类,则矩阵和数组是有用的,适当且非常快的。如果您有混合类,则使用数据框。

但是你走了。在第一个示例中,您的所有数据都转换为character,第二个转换为numeric

x <- as.array(as.matrix(iris))

head(x)
     Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
[1,] "5.1"        "3.5"       "1.4"        "0.2"       "setosa"
[2,] "4.9"        "3.0"       "1.4"        "0.2"       "setosa"
[3,] "4.7"        "3.2"       "1.3"        "0.2"       "setosa"
[4,] "4.6"        "3.1"       "1.5"        "0.2"       "setosa"
[5,] "5.0"        "3.6"       "1.4"        "0.2"       "setosa"
[6,] "5.4"        "3.9"       "1.7"        "0.4"       "setosa"

或者...

x <- array(unlist(iris), dim=c(150, 5), dimnames=list(NULL, names(iris)))

head(x)
     Sepal.Length Sepal.Width Petal.Length Petal.Width Species
[1,]          5.1         3.5          1.4         0.2       1
[2,]          4.9         3.0          1.4         0.2       1
[3,]          4.7         3.2          1.3         0.2       1
[4,]          4.6         3.1          1.5         0.2       1
[5,]          5.0         3.6          1.4         0.2       1
[6,]          5.4         3.9          1.7         0.4       1