微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将制表符分隔数据导入 R

如何解决将制表符分隔数据导入 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 Rfill = 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 举报,一经查实,本站将立刻删除。