如何解决将制表符分隔数据导入 R
我正在尝试建立一个可重复的工作流程,用于读取和格式化大量混乱的制表符分隔的 txt 数据表,但我正在努力寻找可以正确读取数据的函数。
第一行有一个值,随后的行有不同数量的空白单元格,然后是值。 {unpivitR} 将在我读入数据后处理它,但我一生都无法解析超过第一个 col 的内容 - 应该最多 150 个或更多,但第一个中的所有空白行引起了问题,不幸的是我无法删除第一行。如果我手动(在 excel 中...)将它从 txt 转换为 csv 文件,它可以完美导入,但理想情况下这不是我想要的路线。我通常默认使用 {readr} 函数进行导入,但绝对可以接受其他建议!
例如:
read_tsv("Name\n
\t\t\tdet_1\tdet_2\n
\t\t\t4\t5\n
10:10\tSS\tXY\t6\t7",col_names = FALSE)
导入为:
# A tibble: 4 x 1
X1
<chr>
1 Name
2 NA
3 NA
4 10:10
警告:
警告:3 次解析失败。
行列期望实际文件
2 -- 1 列 5 列文字数据
3 -- 1 列 5 列文字数据
4 -- 1 列 5 列文字数据
理想情况下,它应该是这样的:
read_tsv("Name\t\t\t\t\n\t\t\tdet_1\tdet_2\n\t\t\t4\t5\n10:10\tSS\tXY\t6\t7",col_names = FALSE)
# A tibble: 4 x 5
X1 X2 X3 X4 X5
<chr> <chr> <chr> <chr> <chr>
1 Name NA NA NA NA
2 NA NA NA det_1 det_2
3 NA NA NA 4 5
4 10:10 SS XY 6 7
任何指针或者我是否只需要点击并手动将其转换为csvs。我必须在整个文件列表中映射该函数,设置略有不同,因此我无法为每个文件编写特定的内容。
更新: 我刚刚意识到我的 reprex 太简单了,无法完全复制这个问题。数据随机变宽,最多可达约。 200 列向下约 200 行(虽然不一致......)。在这个例子中,“12”应该在第 10 行。
read.delim(text = "Name\n
\t\tdet_1\t\n
\t\t\t4\n
\t\t\t5\n
\t\t\t6\n
\t\t\t7\n
\t\t\t8\n
\t\t\t9\n
\t\t\t10\n
10:10\tSS\tXY\t11\t12",sep = "\t",header = FALSE,fill = TRUE,na.strings = "",strip.white = TRUE)
返回:
V1 V2 V3 V4
1 Name <NA> <NA> NA
2 <NA> <NA> det_1 NA
3 <NA> <NA> <NA> 4
4 <NA> <NA> <NA> 5
5 <NA> <NA> <NA> 6
6 <NA> <NA> <NA> 7
7 <NA> <NA> <NA> 8
8 <NA> <NA> <NA> 9
9 <NA> <NA> <NA> 10
10 10:10 SS XY 11
11 12 <NA> <NA> NA
解决方法
考虑将 read.csv
中的 base R
与 fill = TRUE
结合使用
read.csv(text = "Name\n
\t\t\tdet_1\tdet_2\n
\t\t\t4\t5\n
10:10\tSS\tXY\t6\t7",sep="\t",header = FALSE,fill = TRUE,na.strings = "",strip.white = TRUE)
-输出
V1 V2 V3 V4 V5
1 Name <NA> <NA> <NA> <NA>
2 <NA> <NA> <NA> det_1 det_2
3 <NA> <NA> <NA> 4 5
4 10:10 SS XY 6 7
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。