很难用我的脚本解释我想要实现的目标,但让我试试。
我有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
看起来这是一项艰巨的任务。可行的是它必须由循环完成。有什么想法吗?
答案 0 :(得分:2)
这是一个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
参数将确保每当合并新的加入密钥时将创建一个新行,并且缺少的单元格将填充NA。