Concatena vários arquivos em um diretório de forma ordenada, permitindo NAs

0

Eu tenho 6 arquivos múltiplos, cada um com apenas 1 coluna contendo nomes. Eu quero ler todos esses arquivos e combiná-los em um arquivo para que fique assim:

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

Isso mostra que o nome adam estava lá em todos os arquivos, enquanto Roy estava em 3 arquivos (arquivo1,3,4) e Sam em 2 arquivos (arquivo2,3). Última coluna é adicional e computada depois de combinar todos os arquivos. Isso me dá uma proporção de um nome que aparece em todos os arquivos. por exemplo, para Roy, foi observado em 3 de 6 arquivos, portanto, Count is 3/6 = 0.5

O colnames do dataframe resultante deve representar os nomes reais dos arquivos. Digamos que o arquivo que eu li seja chamado de file1.txt , file2.txt e assim por diante.

Qualquer ajuda será muito apreciada. Obrigado.

    
por Newbie 13.07.2017 / 13:07

2 respostas

0

Você pode escrever scripts em Python que leiam todos os arquivos e criarão um dicionário contendo o nome como chave e o número de nomes contados como valor. No final, você pode dividir cada valor pelo número de arquivos.

Algo parecido com isto:

#!/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)))

EDITAR:
Python é por padrão no Linux. Você pode copiá-lo, colá-lo e executá-lo. Está funcionando

    
por 13.07.2017 / 15:38
0

Para a entrada dada, parece que todo arquivo tem o mesmo número de linhas e extensão, você poderia simplesmente canalizar a coluna.

$ paste *.txt | column -t

EDITAR:

Se os NAs forem "células vazias", use isto:

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

Isso também funciona se os arquivos tiverem números de linha diferentes.

    
por 13.07.2017 / 15:28

Tags