如何在 R 中以 space 分隔的 .txt 跳过双 space?
How to skip double space in a space delimited .txt in R?
问题是我有多个原始数据,在多个 .txt 中,每个文件中都有这样的数据:
-7.400513E-02 1.424561E-04
-.0592041 1.426086E-04
-4.440308E-02 1.436768E-04
-2.960205E-02 1.452942E-04
-1.480103E-02 1.473999E-04
0 1.499939E-04
1.480103E-02 1.531982E-04
2.960205E-02 1.567383E-04
4.440308E-02 1.603394E-04
.0592041 1.636658E-04
我正在导入和混合所有这些数据,因此我可以使用它,使用下一个代码:
Listoffiles <- list.files(pattern = "txt")
Listofdata <- map(Listadearchivos, ~vroom(.x, delim = " ",
col_names = FALSE,
col_types = c(.default = "n")))
Data1 <- do.call(rbind.data.frame, Listofdata)
问题是我得到的是 data.frame 和 NA 的混合,因为在原始数据中有用于数字符号的列,用于 + 和 - 用于 - 的空格,以及许多双空格作为分隔符,给我这样的结果:
X1 X2 X3 X4 X5
1 NA -0.08880615 NA 0.0001429749 NA
2 NA -0.07400513 NA 0.0001424561 NA
3 NA -0.05920410 NA 0.0001426086 NA
4 NA -0.04440308 NA 0.0001436768 NA
5 NA -0.02960205 NA 0.0001452942 NA
6 NA -0.01480103 NA 0.0001473999 NA
7 NA NA 0.00000000 NA 0.0001499939
8 NA NA 0.01480103 NA 0.0001531982
9 NA NA 0.02960205 NA 0.0001567383
10 NA NA 0.04440308 NA 0.0001603394
11 NA NA 0.05920410 NA 1.6366580000
我该怎么做才能只获得两列的值?
data.table 的 fread
正确解析了您的数据。
library(data.table)
Data1 <- fread("test-file.txt")
Data1
# V1 V2
# 1: -0.07400513 0.0001424561
# 2: -0.05920410 0.0001426086
# 3: -0.04440308 0.0001436768
# 4: -0.02960205 0.0001452942
# 5: -0.01480103 0.0001473999
# 6: 0.00000000 0.0001499939
# 7: 0.01480103 0.0001531982
# 8: 0.02960205 0.0001567383
# 9: 0.04440308 0.0001603394
# 10: 0.05920410 0.0001636658
然后您可以使用 data.table::rbindlist
将 data.table 的列表折叠为单个 table。
Listadearchivos <- list.files(pattern = "txt")
Listofdata <- map(Listadearchivos, ~fread(.x))
Data1 <- as.data.frame(rbindlist(Listofdata))
Data1
# V1 V2
# 1 -0.07400513 0.0001424561
# 2 -0.05920410 0.0001426086
# 3 -0.04440308 0.0001436768
# 4 -0.02960205 0.0001452942
# 5 -0.01480103 0.0001473999
# 6 0.00000000 0.0001499939
# 7 0.01480103 0.0001531982
# 8 0.02960205 0.0001567383
# 9 0.04440308 0.0001603394
# 10 0.05920410 0.0001636658
问题是我有多个原始数据,在多个 .txt 中,每个文件中都有这样的数据:
-7.400513E-02 1.424561E-04
-.0592041 1.426086E-04
-4.440308E-02 1.436768E-04
-2.960205E-02 1.452942E-04
-1.480103E-02 1.473999E-04
0 1.499939E-04
1.480103E-02 1.531982E-04
2.960205E-02 1.567383E-04
4.440308E-02 1.603394E-04
.0592041 1.636658E-04
我正在导入和混合所有这些数据,因此我可以使用它,使用下一个代码:
Listoffiles <- list.files(pattern = "txt")
Listofdata <- map(Listadearchivos, ~vroom(.x, delim = " ",
col_names = FALSE,
col_types = c(.default = "n")))
Data1 <- do.call(rbind.data.frame, Listofdata)
问题是我得到的是 data.frame 和 NA 的混合,因为在原始数据中有用于数字符号的列,用于 + 和 - 用于 - 的空格,以及许多双空格作为分隔符,给我这样的结果:
X1 X2 X3 X4 X5
1 NA -0.08880615 NA 0.0001429749 NA
2 NA -0.07400513 NA 0.0001424561 NA
3 NA -0.05920410 NA 0.0001426086 NA
4 NA -0.04440308 NA 0.0001436768 NA
5 NA -0.02960205 NA 0.0001452942 NA
6 NA -0.01480103 NA 0.0001473999 NA
7 NA NA 0.00000000 NA 0.0001499939
8 NA NA 0.01480103 NA 0.0001531982
9 NA NA 0.02960205 NA 0.0001567383
10 NA NA 0.04440308 NA 0.0001603394
11 NA NA 0.05920410 NA 1.6366580000
我该怎么做才能只获得两列的值?
data.table 的 fread
正确解析了您的数据。
library(data.table)
Data1 <- fread("test-file.txt")
Data1
# V1 V2
# 1: -0.07400513 0.0001424561
# 2: -0.05920410 0.0001426086
# 3: -0.04440308 0.0001436768
# 4: -0.02960205 0.0001452942
# 5: -0.01480103 0.0001473999
# 6: 0.00000000 0.0001499939
# 7: 0.01480103 0.0001531982
# 8: 0.02960205 0.0001567383
# 9: 0.04440308 0.0001603394
# 10: 0.05920410 0.0001636658
然后您可以使用 data.table::rbindlist
将 data.table 的列表折叠为单个 table。
Listadearchivos <- list.files(pattern = "txt")
Listofdata <- map(Listadearchivos, ~fread(.x))
Data1 <- as.data.frame(rbindlist(Listofdata))
Data1
# V1 V2
# 1 -0.07400513 0.0001424561
# 2 -0.05920410 0.0001426086
# 3 -0.04440308 0.0001436768
# 4 -0.02960205 0.0001452942
# 5 -0.01480103 0.0001473999
# 6 0.00000000 0.0001499939
# 7 0.01480103 0.0001531982
# 8 0.02960205 0.0001567383
# 9 0.04440308 0.0001603394
# 10 0.05920410 0.0001636658