我有一个标题为 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
。
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
您可以随时尝试使用 sqldf
包来解决此问题:
sqldf("SELECT StoreID, ZIP FROM tab GROUP BY StoreID, ZIP)