Tworzenie nowej tabeli z dużej tabeli .csv

Mam duży plik .csv. Chciałbym filtrować ten plik do nowej tabeli.

Na przykład mam plik .csv jak poniżej:

   f1 f2  f3 f4  f5  f6 f7 f9  f10  f11 
t1  1  0  1   0  1  0   0  0   0    1 
t2  1  0  0   0  0  1   1  1   1    1 
t3  0  0  0   0  0  0   0  0   0    0 
t4  1  0  0   0  1  0   0  0   0    0 
t5  0  0  0   0  0  0   0  0   0    0 
t6  0  0  0   0  0  0   0  0   0    0 

Mam stolik (jak wyżej)

Co chcę zrobić, chcę mieć nową tabelę dla każdego wiersza (co oznacza, że ​​będę miał nową tabelę dla wszystkich wierszy. Np. Nowa tabela dla wiersza t1, nowa tabela dla wiersza t2, nowa tabela dla wiersza t3 itd.) ). Tak jak w tym przykładzie, powinienem mieć 6 nowych tabel.

Aby opracować nową tabelę dla każdego wiersza, istnieje warunek, który należy spełnić. Nowa tabela powinna sprawdzać każdą wartość w każdej kolumnie. A jeśli kolumna ma tę samą wartość z inną kolumną w innym wierszu (która jest wartością 1), powinna być zgrupowana razem.

Tak jak w tym przykładzie, nowa tabela dla t1 będzie składać się z t1, t2, t4, ponieważ wartość w kolumnie f1 ma tę samą wartość (która wynosi 1) z wartością w f1 dla rzędu t2 i t4, również wartość w f5 jest równa wartości w f5 dla wiersza t4, a wartość w f11 jest równa wartości w f11 dla wiersza t2). Oznacza to, że sprawdzi każdą kolumnę. Jedno z wyników dla powinno być następujące:

       f1 f2  f3 f4  f5  f6 f7 f9  f10  f11 
    t1  1  0  1   0  1  0   0  0   0    1 
    t2  1  0  0   0  0  1   1  1   1    1 
    t4  1  0  0   0  1  0   0  0   0    0 

Podobnie jak w przypadku t2, wiersz t2 należy zgrupować z t4, ponieważ wartość w f1 w t1 i wartość f1 w t4 są równe. Jednak t2 nie powinien brać pod uwagę wcześniejszego wiersza (jak w tym przykładzie, nie powinien brać pod uwagę t1). Dane wyjściowe powinny wyglądać następująco:

  f1 f2  f3 f4  f5  f6 f7 f9  f10  f11 
t2  1  0  0   0  0  1   1  1   1    1 
t4  1  0  0   0  1  0   0  0   0    0 

Podobnie jak w innych wierszach (wiersz t3, t4, t5 i t6), powinien sprawdzać każdą wartość w każdej kolumnie. A jeśli kolumna ma tę samą wartość z inną kolumną w innym wierszu (która jest wartością 1), powinna być zgrupowana razem.

Nowa tabela (z nagłówkiem wiersza i kolumny) powinna być następnie zapisana w nowym pliku .csv. Nazwa pliku powinna zostać zmieniona przy użyciu nazwy wiersza. na przykład, jak dla t1, powinien być zapisany jako t1.csv.

To tylko prosty przykład. Proponowane rozwiązanie zostanie zastosowane w innych dużych tabelach danych. Muszę przeczytać plik abc.csv. Oznacza to, że może być więcej niż 100+ zostanie utworzona nowa tabela (gdy użyłem oryginalnych danych).

do tej pory użyłem tego kodu:

a.files <- grep("^Task_vs_Files", dir(), value=TRUE) 
a.files

for(i in 1:length(a.files))
   dat <- read.table(file=a.files[i], header=T, sep=",", row.names=1) 


      (sapply(1:nrow(dat), function(x) if (dat[x,]==1)  #check row
            (sapply(1:nrow(dat), function(y) if (dat[,y]==1) #check column

            { 
                   write.csv( dat[(dat[[x,y]]==1 ) & (1:nrow(dat) >= x) , ] , file = paste("Files_", x) ) #save file based on row names
            } 
            else {NULL} ))

wyjście z a.files:

[1] "Task_vs_Files_Proj.csv"  "Task_vs_Files_Whirr.csv"

zbiór danych z jednego pliku (Task_vs_Files_Proj.csv)

       pom.xml. ZooKeeper.java HBase.java Hadoop.java. BasicServer.java. Abstract.java. HBaseRegion.java
WHIRR-25        1              0          1            0                 1              1                1
WHIRR-28        1              0          1            0                 0              1                0
WHIRR-55        0              0          1            0                 0              0                0
WHIRR-61        0              0          0            0                 0              1                0
WHIRR-76        0              0          1            0                 0              0                0
WHIRR-87        1              1          1            0                 0              1                1
WHIRR-92        1              0          0            1                 0              1                1

Doceń pomoc eksperta!

questionAnswers(1)

yourAnswerToTheQuestion