【问题标题】:Delete a market's data with multiple markets in 1 data frame在 1 个数据框中删除具有多个市场的市场数据
【发布时间】:2013-02-11 23:24:36
【问题描述】:

我需要的是一种检查我的 df 以查看我是否有足够的数据来运行某些功能的方法。如果该特定市场没有足够的数据,我想知道如何删除整个“市场”。例如,我想删除所有 AD3,因为当我需要 4 行数据时,我只有 2 行完整的数据。在我的实际案例中,我希望删除任何少于 23 行数据的市场,并且我有 100 多个市场。

这是dput() 的一小部分我的数据。

data<-structure(list(market = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L, 3L, 3L), .Label = c("AD1", "AD2", "AD3"), class = "factor"), 
date = structure(c(15623, 15624, 15625, 15628, 15623, 15624, 
15625, 15628, 15625, 15628), class = "Date"), open = c(101.52, 
101.68, 102.1, 101.99, 100.73, 100.85, 101.57, 101.01, 100.56, 
100.42), high = c(102.07, 102.39, 102.36, 102.07, 101.4, 
101.59, 101.62, 101.35, 100.56, 100.71), low = c(101.26, 
101.56, 101.63, 101.5, 100.59, 100.85, 101.07, 100.97, 100.56, 
100.41), last = c(101.78, 102.08, 101.76, 101.91, 101.08, 
101.37, 101.06, 101.21, 100.41, 100.56)), .Names = c("market", 
"date", "open", "high", "low", "last"), row.names = c(1L, 2L, 
3L, 4L, 5L, 6L, 7L, 8L, 11L, 12L), class = "data.frame", na.action = structure(9:10,.Names = c("9", 
"10"), class = "omit"))

我的 100 多个市场位于 1 个数据框中。因此,如果我有 22 行数据,我需要删除与该特定“市场”名称关联的所有 22 行。

【问题讨论】:

    标签: r dataframe data-management


    【解决方案1】:

    @Marius 更快,但我的解决方案几乎相同:

    N <- 3 # threshold
    range <- names(which(table(data$market)>=N))
    ans1 <- data[data$market %in% range,]
    ans1
    

    但是,如果您要在大型数据集上分析 100 多个市场,您最好使用 data.table 以加快速度:

    require(data.table)
    dt <- data.table(data)
    setkey(dt, market)
    ans2 <- dt[J(range)]
    ans2
    

    结果相似:

    all.equal(ans1,ans2,check.attributes=F)
    # [1] TRUE
    

    【讨论】:

      【解决方案2】:

      使用table 计算每个市场的出现次数,从那里开始非常简单:

      min_data_points <- 4
      market_tab <- table(data$market)
      markets_to_keep <- names(market_tab)[market_tab >= min_data_points]
      
      fixed_data <- subset(data, market %in% markets_to_keep)
      

      【讨论】:

      • 谢谢你,r 和编程新手
      猜你喜欢
      • 2020-03-05
      • 1970-01-01
      • 2016-03-12
      • 2023-01-20
      • 2022-10-23
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多