仅使用矩阵条目将矩阵从r导出到csv文件

时间:2018-08-11 12:40:26

标签: r csv

这是r中的矩阵A:

          [,1]         [,2]         [,3]            [,4]    
[1,]   0.69036059      0.02021414   0.0006167409     0.0000000000   
[2,]   0.23268734      0.67640555   0.0202016684     0.0006167409    
[3,]   0.06068696      0.22798377   0.6759883802     0.0202016684    
[4,]   0.01307434      0.05946023   0.2278431604     0.6759883802

用于导出此矩阵的代码:write.csv(A1,"ProbMatrix.csv")

csv文件中的结果:

        V1               V2          V3               V4
1   0.69036059      0.02021414   0.0006167409     0.0000000000
2   0.23268734      0.67640555   0.0202016684     0.0006167409
3   0.06068696      0.22798377   0.6759883802     0.0202016684
4   0.01307434      0.05946023   0.2278431604     0.6759883802

那不是我想要的,我只想要数字

0.69036059   0.02021414   0.0006167409   0.0000000000
0.23268734   0.67640555   0.0202016684   0.0006167409
0.06068696   0.22798377   0.6759883802   0.0202016684
0.01307434   0.05946023   0.2278431604   0.6759883802

我试图在导出之前删除行和列,我试图在write.csv代码中包含row.names=Falsecol.names=FALSE参数,但是没有一个给我想要的结果。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

在write.table函数中,有一个选项指示列名和/或名称不被导出:row.names = F和/或col.names =F。除非您在命令中将其指定为FALSE,否则默认值为TRUE(表示导出名称):

write.table(A, file="file.csv", row.names = F, col.names = F)

答案 1 :(得分:0)

这里的问题是R如何在将csv文件读回到R环境时如何处理它们。如果您使用write.table(...row.names = FALSE, col.names = FALSE)将矩阵保存到csv文件中,它将在不添加列名的情况下写入矩阵。但是,当您使用read.table()read.csv()将其读回到R环境时,会出现问题,因为这些函数将文件读回到data.frame而不是matrix类型的对象中

让我在这里举例说明。

data_set <- c(0.69036059, 0.02021414, 0.0006167409, 0.0000000000, 0.23268734, 
              0.67640555, 0.0202016684, 0.0006167409, 0.06068696, 0.22798377,
              0.6759883802, 0.0202016684, 0.01307434, 0.05946023, 0.2278431604 , 
              0.6759883802)

test_matrix <- matrix(data = data_set, nrow = 4, ncol = 4)

# Look at the type of the object
str(test_matrix)
num [1:4, 1:4] 0.690361 0.020214 0.000617 0 0.232687 ...

write.table(x = test_matrix,file = "test.csv", sep = ',', 
                              row.names = FALSE, col.names = FALSE)

csv file has no column names(headers) added to it

test_object <- read.table(file = "test.csv", header = FALSE, sep = ',')

str(test_object)
'data.frame':   4 obs. of  4 variables:
 $ V1: num  0.690361 0.020214 0.000617 0
 $ V2: num  0.232687 0.676406 0.020202 0.000617
 $ V3: num  0.0607 0.228 0.676 0.0202
 $ V4: num  0.0131 0.0595 0.2278 0.676

因此,在将其读回到R时,它将从csv中读取的数据作为data.frame对象。如果没有为数据框指定列名,则会自动创建它们。我认为这就是这里的问题。

即使我们使用read_csv包中的readr函数,同样的问题仍然存在。

library(readr)

test_object <- read_csv("test.csv", col_names = FALSE)

str(test_object)

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   4 obs. of  4 variables:
 $ X1: num  0.690361 0.020214 0.000617 0
 $ X2: num  0.232687 0.676406 0.020202 0.000617
 $ X3: num  0.0607 0.228 0.676 0.0202
 $ X4: num  0.0131 0.0595 0.2278 0.676
 - attr(*, "spec")=List of 2
  ..$ cols   :List of 4
  .. ..$ X1: list()
  .. .. ..- attr(*, "class")= chr  "collector_double" "collector"
  .. ..$ X2: list()
  .. .. ..- attr(*, "class")= chr  "collector_double" "collector"
  .. ..$ X3: list()
  .. .. ..- attr(*, "class")= chr  "collector_double" "collector"
  .. ..$ X4: list()
  .. .. ..- attr(*, "class")= chr  "collector_double" "collector"
  ..$ default: list()
  .. ..- attr(*, "class")= chr  "collector_guess" "collector"
  ..- attr(*, "class")= chr "col_spec"

我认为一种可能的解决方案是将对象保存/写入.RData文件中。您可以在此问题中找到更多内容-R save Matrix to csv, and load as Matrix