YC
次のようなデータテーブルがあるとします。
Categories: colsums: tillTF:
ID: cat NA 0
MA NA 0
spayed NA 0
declawed NA 0
black NA 0
3 NA 0
no 57 1
claws NA 0
calico NA 0
4 NA 0
no 42 1
striped NA 0
0.5 NA 0
yes 84 1
not fixed NA 0
declawed NA 0
black NA 0
0.2 NA 0
yes 19 1
0.2 NA 0
yes 104 1
NH NA 0
spayed NA 0
claws NA 0
striped NA 0
12 NA 0
no 17 1
black NA 0
4 NA 0
yes 65 1
ID: DOG NA 0
MA NA 0
...
それは、1) 実際にはピボット テーブルではなく、ピボット テーブルのように一貫性がなくフォーマットされていること、および 2) データがはるかに複雑であり、数十年にわたって一貫して入力されていないことだけです。データに関して安全に行うことができる唯一の仮定は、各レコードに関連付けられた 12 の変数があり、常に同じ順序で入力されるということです。
私の目標は、このデータを解析して、各属性と関連する数値レコードが次のように 1 行の適切な列に収まるようにすることです。
Cat MA spayed declawed black 3 no 57
Cat MA spayed claws calico 0.5 no 42
Cat MA not fixed declawed black 0.2 yes 19
Cat MA not fixed declawed black 0.2 yes 104
Cat NH spayed claws striped 12 no 17
Cat NH spayed claws black 4 yes 65
Dog MA ....
「レコード」を識別し、別の「レコード」に到達するまでデータ テーブルの列を逆方向に読み取ることで、配列に値を再書き込みする for ループを作成しました。私はRを初めて使用するので、それが可能かどうかわからないまま、理想的なループを書きました。
array<-rep(0, length(7))
for (i in 1:7)
if(YC$tillTF[i]==1){
array[7]<-(YC$colsums[i])
array[6]<-(YC$Categories[i])
array[5]<-(YC$Categories[i-1])
array[4]<-(YC$Categories[i-2])
array[3]<-(YC$Categories[i-3])
array[2]<-(YC$Categories[i-4])
array[1]<-(YC$Categories[i-5])
}
YC_NT<-rbind(array)
入力したらarray
、ループして、一意のレコードごとYC
に新しい行を作成します。YC_NT
for (i in 8:length(YC$tillTF))
if (YC$tillTF[i]==1){
array[8]<-(YC$colsums[i])
array[7]<-(YC$Categories[i])
if (YC$tillTF[i-1]==0){
array[6]<-YC$Categories[i-1]
}else{
rbind(array, YC_NT)}
if (YC$tillTF[i-2]==0){
array[5]<-YC$Categories[i-2]
}else{
rbind(array, YC_NT)}
if(YC$tillTF[i-3]==0){
array[4]<-YC$Categories[i-3]
}else{
rbind(array, YC_NT)}
if(YC$tillTF[i-4]==0){
array[3]<-YC$Categories[i-4]
}else{
rbind(array, YC_NT)}
if(YC$tillTF[i-5]==0){
array[2]<-YC$Categories[i-5]
}else{
rbind(array, YC_NT)}
if(YC$tillTF[i-6]==0){
array[1]<-YC$Categories[i-6]
}else{
rbind(array, YC_NT)}
}else{
array<-array}
データに対して関数内でこのループを実行するとYC_NT
、単一の行を含むデータ テーブルが返されます。array
検索に数日を費やした後、毎回一意の名前を付けずにデータテーブルの最後の行にベクトルを追加できる R 関数があることを知りません。私の質問:
array
1) と呼ばれる前の行を書き換えることなく、データテーブルの最後に呼び出されるベクトルを追加する関数はありarray
ますか?
2) そのような関数が存在しない場合array
、for ループが新しい数値レコードに到達するたびに新しい名前を作成するにはどうすればよいですか?
ご協力いただきありがとうございます、