R:调用列时 read.table 在 tab-delimited 文件中检测缺失值的问题
R: Issue with read.table detecting missing values in a tab-delimited file when calling columns
我正在尝试做一些非常简单的事情,但我玩得很开心。我有一组数据存储在 tab-delimited 文件中。在这个 tab-delimited 文件中,有缺失值。当我尝试调用具有 tab-separated 值的列时,调用了错误的列。我相信这是因为第三列(我要提取的那一列)中 header 行之后的第一个值是一个缺少值的列。这是我的数据示例(我的实际数据是 36000 行,但所有格式相同):
x y z
230.125 49.875 0
230.375 49.875 0
230.625 49.875 0
261.125 49.875 0
261.375 49.875 0
251.625 48.875 4.38619211912155
251.875 48.875 3.70883572995663
252.125 48.875 3.2566264629364
252.375 48.875 3.00820730924606
254.125 48.875 7.88962166309357
254.375 48.875 8.50787222385406
254.625 48.875 8.95758244991303
254.875 48.875 9.47213044166565
255.125 48.875 9.96883320808411
255.375 48.875 10.4400730609894
255.625 48.875 10.6357674837112
255.875 48.875 9.81607600450516
274.125 48.875 0
274.375 48.875 0
274.625 48.875 0
274.875 48.875 0
275.125 48.875 0
275.375 48.875 0
275.625 48.875 0
275.875 48.875 0
276.125 48.875 0
我正在尝试提取第三列并将其附加到另一个矩阵以便稍后进行计算(这将对许多相同类型的文件完成)。这就是为什么我在这里初始化了第二个矩阵。
这是我的代码:
library(data.table)
temp <- c()
matrix_prelim <- matrix(nrow = 36000)
temp <- as.matrix(read.table("/myfilepath/example.txt", sep="\t", fill = TRUE. na.strings = "", header=TRUE)
matrix_prelim <- cbind(matrix_prelim, temp[[3]])
然后打印:
head(matrix_prelim)
产量:
[,1] [,2]
[1,] NA 230.625
[2,] NA 230.625
[3,] NA 230.625
[4,] NA 230.625
[5,] NA 230.625
[6,] NA 230.625
当我想要的是(知道初始化没有内容的矩阵会给我一列 NA,这没问题):
[,1] [,2]
[1,] NA 0
[2,] NA 0
[3,] NA 0
[4,] NA 0
[5,] NA 0
[6,] NA 4.38619211912155
我完全不知道我做错了什么。任何帮助将不胜感激。
谢谢!
编辑:我应该注意到我已经尝试将 na.strings 参数更改为“”,完全取出 na.strings 参数,尝试使用 fread 并获取第三列(只是没有根本不起作用),并尝试设置 headers = FALSE。
虽然您调用了 library(data.table)
,但您实际上并未将数据转换为 data.table
格式。相反,您的数据很可能作为 data.frame
读入,这很好。
无需初始化矩阵即可将第 3 列存储为单独的向量。尝试这样的事情:
temp <- as.matrix(read.table("/myfilepath/example.txt", sep="\t", fill = TRUE. na.strings = "", header=TRUE)
matrix_prelim <- temp[3]
让我知道这是否有效。
我正在尝试做一些非常简单的事情,但我玩得很开心。我有一组数据存储在 tab-delimited 文件中。在这个 tab-delimited 文件中,有缺失值。当我尝试调用具有 tab-separated 值的列时,调用了错误的列。我相信这是因为第三列(我要提取的那一列)中 header 行之后的第一个值是一个缺少值的列。这是我的数据示例(我的实际数据是 36000 行,但所有格式相同):
x y z
230.125 49.875 0
230.375 49.875 0
230.625 49.875 0
261.125 49.875 0
261.375 49.875 0
251.625 48.875 4.38619211912155
251.875 48.875 3.70883572995663
252.125 48.875 3.2566264629364
252.375 48.875 3.00820730924606
254.125 48.875 7.88962166309357
254.375 48.875 8.50787222385406
254.625 48.875 8.95758244991303
254.875 48.875 9.47213044166565
255.125 48.875 9.96883320808411
255.375 48.875 10.4400730609894
255.625 48.875 10.6357674837112
255.875 48.875 9.81607600450516
274.125 48.875 0
274.375 48.875 0
274.625 48.875 0
274.875 48.875 0
275.125 48.875 0
275.375 48.875 0
275.625 48.875 0
275.875 48.875 0
276.125 48.875 0
我正在尝试提取第三列并将其附加到另一个矩阵以便稍后进行计算(这将对许多相同类型的文件完成)。这就是为什么我在这里初始化了第二个矩阵。
这是我的代码:
library(data.table)
temp <- c()
matrix_prelim <- matrix(nrow = 36000)
temp <- as.matrix(read.table("/myfilepath/example.txt", sep="\t", fill = TRUE. na.strings = "", header=TRUE)
matrix_prelim <- cbind(matrix_prelim, temp[[3]])
然后打印:
head(matrix_prelim)
产量:
[,1] [,2]
[1,] NA 230.625
[2,] NA 230.625
[3,] NA 230.625
[4,] NA 230.625
[5,] NA 230.625
[6,] NA 230.625
当我想要的是(知道初始化没有内容的矩阵会给我一列 NA,这没问题):
[,1] [,2]
[1,] NA 0
[2,] NA 0
[3,] NA 0
[4,] NA 0
[5,] NA 0
[6,] NA 4.38619211912155
我完全不知道我做错了什么。任何帮助将不胜感激。
谢谢!
编辑:我应该注意到我已经尝试将 na.strings 参数更改为“”,完全取出 na.strings 参数,尝试使用 fread 并获取第三列(只是没有根本不起作用),并尝试设置 headers = FALSE。
虽然您调用了 library(data.table)
,但您实际上并未将数据转换为 data.table
格式。相反,您的数据很可能作为 data.frame
读入,这很好。
无需初始化矩阵即可将第 3 列存储为单独的向量。尝试这样的事情:
temp <- as.matrix(read.table("/myfilepath/example.txt", sep="\t", fill = TRUE. na.strings = "", header=TRUE)
matrix_prelim <- temp[3]
让我知道这是否有效。