以有序方式连接目录中的多个文件,允许 NA

以有序方式连接目录中的多个文件,允许 NA

我有 6 个多个文件,每个文件只有 1 列包含名称。我想读取所有这些文件并将它们合并到 1 个文件中,如下所示:

file1  file2  file3  file4  file5  file6  Count
adam   adam   adam   adam   adam   adam   1
Roy    NA     Roy    Roy    NA     NA     0.5
NA     Sam    Sam    NA     NA     NA     0.33

这表明名称adam存在于每个文件中,同时Roy存在于 3 个文件 (file1,3,4) 和Sam2 个文件 (file2,3) 中。最后一列是附加的,是在合并所有文件后计算的。它给出了所有文件中出现的名称的比例。例如,对于 Roy,在 6 个文件中的 3 个中观察到它,因此Count3/6 = 0.5

生成的数据帧colnames应该代表实际的文件名。假设我读取的文件名为file1.txtfile2.txt等等......

任何帮助都感激不尽。谢谢。

答案1

您可以编写Python脚本来读取每个文件并创建包含名称作为键和计数名称数量作为值的字典。最后,您可以将每个值除以文件数。

像这样的事情:

#!/usr/bin/env python  

filelist= ['file1.txt', 'file2.txt', 'file3.txt', 'file4.txt']
dictionary= dict()

for file in filelist:
    fd= open(file, "r")

    for name in fd.readlines():
        name= name.strip()
        if name in dictionary.keys():
            dictionary[name]+= 1
        else:
            dictionary[name]= 1
        fd.close()

for x in dictionary.keys():
    print("{0} : {1}".format(x, float(dictionary[x])/len(filelist)))

编辑:
Linux 中默认使用 Python。您可以复制它,粘贴到文件并执行。它正在工作

答案2

对于给定的输入,似乎每个文件都有相同的行数和扩展名,您只需通过管道传输到列即可。

$ paste *.txt | column -t

编辑:

如果 NA 是“空单元格”,请使用以下命令:

$ paste *.txt |  column -s $'\t'  -tn

如果文件具有不同的行号,这也适用。

相关内容