r - 如何防止 'read.table' 将下划线和连字符更改为点?

标签 r character read.table

我有一堆文件,我将它们合并到一个数据框中。文件名如下:unc.edu.b6530750-0410-43ec-bb79-f862ca3424a6.1918120.rsem.genes.results

我希望文件名是列名。我正在使用以下代码:

for (file in file_list){

  if (!exists("dataset")){
      dataset <- read.table(file, header=TRUE, colClasses = c(rep("character", 2),                     rep("NULL", 2)), col.names = c("gene_id", deparse(substitute(file)), "NuLL", "NULL"), sep="\t")
      print(deparse(substitute(file)))
    }

    if (exists("dataset")){
      temp_dataset <-read.table(file, header=TRUE, colClasses = c(rep("character", 2), rep("NULL", 2)), col.names = c("gene_id", deparse(substitute(file)), "NuLL", "NULL"), sep="\t")
      print(deparse(substitute(file)))
      dataset<-merge(dataset, temp_dataset, by = "gene_id")
      rm(temp_dataset)
    }
}

一切顺利,只是列名现在用点代替了下划线。
colnames(data)

[1] "gene_id"                                                                       
[2] "X...unc.edu.02cb8dbe.ef56.471c.b52d.41c29219fd95.1794854.rsem.genes.results..x"
[3] "X...unc.edu.02cb8dbe.ef56.471c.b52d.41c29219fd95.1794854.rsem.genes.results..y"
[4] "X...unc.edu.02f5dcba.bdcc.4424.aed4.195a8d551325.2085643.rsem.genes.results."  

关于导致这种情况的原因的任何解释都会有所帮助,因为我稍后需要使用另一个文件更改这些名称。

最佳答案

正如@akrun 在评论中所说,read.table(file, ..., check.names=FALSE)将解决眼前的问题。

但是,现在有更简洁的方法可以使用一些 tidyverse 包来实现您想要做的事情。

首先让我们加载包并生成一些示例数据:

library(purrr)
library(readr)
data <- c("gene_id\tresult\trandom_a\trandom_b
TNF\t1e-8\t1.7\t4.3
IL8\t0.4\t-0.3\t8.6",
"gene_id\tresult\trandom_a\trandom_b
TNF\t2.4e-7\t1.7\t4.3
IL8\t0.9\t0.8\t8.3",
"gene_id\tresult\trandom_a\trandom_b
TNSF8\t0.003\t2.1\t9.7
IL8\t0.02\t1.9\t4.6")
file_list <- sprintf("file_%d.csv", 1:3)
walk2(data, file_list, ~write_tsv(read_tsv(.x), .y))

现在这是读取和合并数据的实际位:
library(purrr)
library(readr)
library(dplyr)
dataset <- file_list %>%
  map(~read_tsv(.x, col_types = "cc__", col_names = c("gene_id", .x), skip = 1)) %>%
  reduce(full_join, by = "gene_id")

这使用 map逐个读取每个文件,跳过第一个大概标题行以及第三和第四列,并将结果列重命名为 gene_id和文件名。然后使用 dplyr::full_join 按顺序连接它们。和 purrr::reduce .

虽然这个问题很久以前就被问到了,但这种类型的任务很常见,所以我认为基于 tidyverse 的答案仍然有用。 (而且它仍然在“带有投票的未回答问题”过滤器中。)

关于r - 如何防止 'read.table' 将下划线和连字符更改为点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25471567/

相关文章:

RStudio 本地 + R 云

r - 如何在 R 中为 C5.0 包设置成本矩阵?

r - 如何从 URL 读取表格并将其保存为数据框?

R 列和 type.convert(data[[i]] 中的错误,特别是在 Mac 上

r - Scales = "free"适用于 facet_wrap 但不适用于 facet_grid

r - 如何处理用作矩阵中索引的整数(0)向量

C 中的字符频率直方图

r - 行尾的额外逗号导致 read.csv 和 read.table 出错

c - 在 C 中快速打印字符串或数组的字符

wpf - 在 WPF 中,如何确定按下的键是否是输入键(是否打印某些内容)?