2013-02-11 58 views
1

我需要的是一種檢查我的df的方法,以查看我是否有足夠的數據來運行某些功能。如果沒有足夠的數據用於特定市場,我想知道如何刪除整個「市場」。例如,我想刪除所有的AD3,因爲我需要4個完整的數據行。在我的實際情況中,我希望刪除任何數據行少於23行的市場,並且我有100多個市場。刪除1個數據框中的多個市場的市場數據

這裏是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行。

回答

1

使用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) 
+0

謝謝,新的r和編程 – Tim 2013-02-12 02:02:08

2

@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