这是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=False
和col.names=FALSE
参数,但是没有一个给我想要的结果。
我该如何解决这个问题?
答案 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