大きな .csv ファイルがあります。そのファイルを新しいテーブルにフィルター処理したいと思います。
たとえば、次のような .csv ファイルがあります。
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
私はテーブルを持っています(上記のように)
私がやりたいことは、各行に新しいテーブルを作成したいということです (つまり、すべての行に新しいテーブルを作成します。たとえば、行 t1 に新しいテーブル、行 t2 に新しいテーブル、行 t3 に新しいテーブルなど)。 )。この例のように、6 つの新しいテーブルが必要です。
行ごとに新しいテーブルを作成するには、満たす必要がある条件があります。新しいテーブルは、各列のすべての値を確認する必要があります。また、列の値が他の行の他の列と同じ値 (値 1) の場合は、グループ化する必要があります。
この例のように、t1 の新しいテーブルは t1、t2、t4 で構成されます。列 f1 の値は、行 t2 および t4 の f1 の値と同じ値 (1) を持ち、f5 の値も値と等しいためです。行 t4 の f5 の値、および f11 の値は行 t2 の f11 の値と等しい)。つまり、すべての列をチェックします。の出力の 1 つは次のようになります。
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
t2 については、t1 の f1 の値と t4 の f1 の値が等しいため、行 t2 は t4 とグループ化する必要があります。ただし、t2 は前の行を考慮すべきではありません (この例のように、t1 を考慮すべきではありません)。出力は次のようになります。
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
他の行 (行 t3、t4、t5、および t6) と同様に、各列のすべての値を確認する必要があります。また、列の値が他の行の他の列と同じ値 (値 1) の場合は、グループ化する必要があります。
次に、新しいテーブル (行と列のヘッダーを含む) を新しい .csv ファイルに保存する必要があります。行名を使用してファイルの名前を変更する必要があります。たとえば、t1 については、t1.csv として保存する必要があります。
これは単純な例にすぎません。ここで提案されたソリューションは、他の大きなデータ テーブルに適用されます。abc.csv ファイルを読み取る必要があります。つまり、100 以上の新しいテーブルが作成される可能性があります (元のデータを使用した場合)。
これまでのところ、私はこのコードを使用しました:
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} ))
a.files からの出力:
[1] "Task_vs_Files_Proj.csv" "Task_vs_Files_Whirr.csv"
ファイルの 1 つからのデータセット (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
専門家からの助けに感謝します!