我有一个名为tab
的R数据框,如下所示:
StoreID Sales ZIP day
1 4900 55401 1/1/1993
1 3121 55401 1/2/1993
3 10021 90210 1/1/1993
3 50000 90210 1/2/1993
13 12000 12312 1/1/1993
...
唯一StoreID
值的数量为40,而唯一ZIP
值的数量为25.我基本上需要一个长度为40的数据帧,只包含StoreID和邮政编码。
这基本上就是我尝试过的:
ID_ZIP <- data.frame(unique(tab$StoreID))
for(i in unique(tab$StoreID)){
dat <- tab[StoreID == i]
append(unique(tab$Zip))
}
我有点陷入困境。我习惯于在Python中进行键值迭代。merge
会是正确的方法吗?
编辑: 结果集:
StoreID ZIP
1 55401
3 90210
13 12312
...
答案 0 :(得分:4)
unique()
函数适用于data.frames。
我猜猜你的意思是这个?
tab<- read.table(text="StoreID Sales ZIP day
1 4900 55401 1/1/1993
1 3121 55401 1/2/1993
3 10021 90210 1/1/1993
3 50000 90210 1/2/1993
13 12000 12312 1/1/1993", header=T)
unique(tab[,c(1,3)])
StoreID ZIP
1 1 55401
3 3 90210
5 13 12312
或更明确地说:
unique(tab[,c("StoreID","ZIP")])
StoreID ZIP
1 1 55401
3 3 90210
5 13 12312
答案 1 :(得分:1)
您始终可以尝试使用sqldf
包来解决此问题:
sqldf("SELECT StoreID, ZIP FROM tab GROUP BY StoreID, ZIP)