gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:52:09 25 4
gpt4 key购买 nike

我有一堆文件,我将它们合并到一个数据框中。文件名如下: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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com