【问题标题】:Create dataframe from unique vectors of differing lengths in R?从R中不同长度的唯一向量创建数据框?
【发布时间】:2016-02-18 23:22:02
【问题描述】:

我有一个 R 数据框,标题为 tab,如下所示:

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(subset(tab,select=c(StoreID,Zip))) 怎么样?我不能完全确定这是否会工作/给你你想要的——可重复的例子会很好。
  • 您必须首先确定您希望如何处理同一商店的多个拉链箱。你只是选择第一个吗?
  • @PierreLafortune,我认为每个商店只能在一个邮政编码中(假设 OP 指的是美国邮政编码......)
  • 在一个给定的邮政编码中可以有多个商店

标签: r dataframe unique


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您始终可以尝试使用 SQL 来解决这个问题,方法是使用 sqldf 包:

    sqldf("SELECT StoreID, ZIP FROM tab GROUP BY StoreID, ZIP)

    【讨论】:

    • 谢谢。不过,我已经从 MySQL Workbench 获得了数据。下次我会试一试。
    • 是的,试试吧。如果你知道你的 SQL,那么sqldf 会很容易。
    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多