你的数据我没法费力打一遍,但是我自己编了一个类似的例子,但是道理和你一样,我的数据是:
> 车辆<-c("A","C","H","E","B","C","E","G","F","H")
> 观测数据<-runif(10,min=1,max=2)
> example_car<-data.frame(车辆,观测数据)
A,B,C...等表示车辆,后面生成了1-2之间均匀分布的10个随机数作为你的时间列,这样整合成的数据框example_car就和你的原题类似了,也就是如下:
车辆 观测数据
1 A 1.619539
2 C 1.043553
3 H 1.737147
4 E 1.174920
5 B 1.451731
6 C 1.573667
7 E 1.499189
8 G 1.560143
9 F 1.620255
10 H 1.453784
由于需要看谁进场了两次,需要进行频数统计,使用table函数,即
x<-table(example_car$车辆)
此时的x值如下
A B C E F G H
1 1 2 2 1 1 2
为了保持一致,我们把x转化成数据框,即
x<-as.data.frame(x)
此时的x就是很熟悉的一种形式了:
Var1 Freq
1 A 1
2 B 1
3 C 2
4 E 2
5 F 1
6 G 1
7 H 2
下一步需要在生成的频数数据框x和原数据框examp_car中搭建可以共同的桥梁,共同变量是车辆,我们先把x的第一列名称改为车辆以求统一,即
names(x)[1]<-"车辆"
此时的x形式为
车辆 Freq
1 A 1
2 B 1
3 C 2
4 E 2
5 F 1
6 G 1
7 H 2
现在就可以使用merge函数进行合并了,merge(x,y,by=)中,x,y为两个数据框,by是靠什么整合在一起,因此本例中:
example_car1<-merge(example_car,x,by="车辆")
整合后的example_car1为
车辆 观测数据 Freq
1 A 1.210787 1
2 B 1.919810 1
3 C 1.458615 2
4 C 1.639834 2
5 E 1.747508 2
6 E 1.905324 2
7 F 1.285928 1
8 G 1.539241 1
9 H 1.398195 2
10 H 1.669576 2
最后一步就是很简单的把Freq为2的筛选出来就好了,即
example_car1[example_car1$Freq==2,]
[ ]中“,”之前表示行,后面表示列,列为空表示全部列,行为example_car1$Freq==2表示筛选出Freq=2的行,最终的example_car1就是结果,如下所示
车辆 观测数据 Freq
3 C 1.458615 2
4 C 1.639834 2
5 E 1.747508 2
6 E 1.905324 2
9 H 1.398195 2
10 H 1.669576 2
上述代码亲测有效,不明白可以给我发邮件,
mijiyougu@163.com(觅寄忧谷的拼音)
希望能帮到你!