【问题标题】:Collecting data in one row from different csv files by the name按名称从不同的csv文件中收集一行数据
【发布时间】:2014-02-07 14:17:26
【问题描述】:

很难解释我到底想用我的脚本实现什么,但让我试试吧。

我有 20 个不同的 csv 文件,所以我将它们加载到 R 中:

tbl = list.files(pattern="*.csv")
list_of_data = lapply(tbl, read.csv)

然后在您的帮助下,我将它们合二为一并删除了所有重复项:

data_rd <- subset(transform(all_data, X = sub("\\..*", "", X)), 
       !duplicated(X))

我现在有 1 个主表,其中包含所有名称(加入):

Accession

AT1G19570
AT5G38480
AT1G07370
AT4G23670
AT5G10450
AT4G09000
AT1G22300
AT1G16080
AT1G78300
AT2G29570

现在我想在其他 csv 文件中找到这个加入,并将这个加入的数据放在同一个原始文件中。有 20 个 csv 文件,每个 csv 有 20 列,所以在相同的情况下,它可能会给我 400 列。需要多长时间都没关系。它必须完成。甚至可以用 R 做吗?

例子:

                 First csv                  Second csv           Third csv

Accession    Size Lenght Weight         Size Lenght Weight    Size Lenght Weight 



AT1G19570     12   23     43             22     77   666      656     565   33
AT5G38480
AT1G07370     33   22     33             34     22
AT4G23670
AT5G10450
AT4G09000     12   45     32
AT1G22300
AT1G16080
AT1G78300                                 44    22  222
AT2G29570

这似乎是一项艰巨的任务。可能它必须由循环完成。有什么想法吗?

【问题讨论】:

    标签: r csv


    【解决方案1】:

    这是一个merge 循环。这是粗略的 R 代码,每次合并都会低效地增长。 像以前一样开始:

    tbls = list.files(pattern="*.csv")
    list_of_data = lapply(tbl, read.csv)
    tbl=list_of_data[[1]]
    
    for(i in 2:length(list_of_data))
    {
       tbl=merge(tbl, list of_data[[i]], by="Accession", all=T)
    }
    

    匹配的列名(不用作键)将使用后缀(.x、.y 等)重命名,all=T 参数将确保每当一个新的 Accession 键合并一个新行将被制作,缺失的单元格将用 NA 填充。

    【讨论】:

    • 尝试运行这样的代码,但我是初学者。无论如何感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多