假设我有一个名为的数据表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 个变量,并且它们始终以相同的顺序输入。
我的目标是解析这些数据,以便每个属性和关联的数字记录都位于单行的适当列中,如下所示:
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
返回包含单行的数据表。经过几天的搜索,我不知道有一个 R 函数可以将向量添加array
到数据表的最后一行,而无需每次都给它一个唯一的名称。我的问题:
1) 是否有一个函数可以array
在数据表的末尾添加一个向量调用而不重写前一行调用array
?
2)如果不存在这样的函数,我如何为array
每次我的 for 循环到达新的数字记录时创建一个新名称?
谢谢你的帮助,