【发布时间】:2016-09-22 23:54:29
【问题描述】:
我有一个时间序列/面板数据,包括加密的 IMEI(每个手机唯一,但每个用户不唯一)和手机品牌。 IMEI中的缺失值并不多,但手机品牌中的缺失值很多。由于唯一的 IMEI 对应于唯一的手机,我们可以通过 IMEI 推断缺失的品牌。
我的解决方案是使用我当前的数据构建一个品牌表和merge(by=IMEI) 的 IMEI。
我只是好奇。还有其他方法吗?例如,在 dplyr 或 data.table 中,或者只是 r-base 函数。我的数据很大,大约有 300 万个观察值。
注意:一个用户可以有多个设备/IMEI;品牌缺少一些时间,无论是在开始时间、中间时间还是结束时间。
# create sample data
user<-rep(letters[1:5],each=6)
time<-rep(1:6,5)
imei<-c(rep(100,6),rep(200,4),NA,201,rep(300,6),rep(400,3),401,404,404,rep(500,5),NA)
brand<-c(rep('Apple',3),NA,NA,'Apple',NA,rep('ZTE',4),NA,NA,NA,NA,rep('Samsung',3),NA,'Huawei',NA,'Nokia','HTC',NA,rep('Moto',6))
dt<-data.frame(time,user,imei,brand)
#data
time user imei brand
1 1 a 100 Apple
2 2 a 100 Apple
3 3 a 100 Apple
4 4 a 100 <NA>
5 5 a 100 <NA>
6 6 a 100 Apple
7 1 b 200 <NA>
8 2 b 200 ZTE
9 3 b 200 ZTE
10 4 b 200 ZTE
11 5 b NA ZTE
12 6 b 201 <NA>
13 1 c 300 <NA>
14 2 c 300 <NA>
15 3 c 300 <NA>
16 4 c 300 Samsung
17 5 c 300 Samsung
18 6 c 300 Samsung
19 1 d 400 <NA>
20 2 d 400 Huawei
21 3 d 400 <NA>
22 4 d 401 Nokia
23 5 d 404 HTC
24 6 d 404 <NA>
25 1 e 500 Moto
26 2 e 500 Moto
27 3 e 500 Moto
28 4 e 500 Moto
29 5 e 500 Moto
30 6 e NA Moto
【问题讨论】: