2011-03-05 45 views
30

選擇值我有一個數據表R:R:從數據表中範圍

name date 
---- ---- 
John 1156649280 
Adam 1255701960 
...etc... 

我想所有具有範圍內的日期行。在SQL中,我可能會說SELECT * FROM mytable WHERE date > 5 AND date < 15

在R中,根據特定列中值的範圍來選擇行,等效於什麼?

+7

注意,sqldf包,可以應用SQL

subset(df, date==3) name date 1 John 3 

提取物的範圍相匹配到R數據幀。例如'庫(sqldf); sqldf(「select * from mytable where date> 5 and date <15」)''。請參閱主頁http://sqldf.googlecode.com。 – 2011-03-05 16:23:00

+0

@G。格洛騰迪克非常酷;我想*有人*寫過這樣的東西,謝謝你的鏈接 – poundifdef 2011-03-05 16:31:56

+4

我認爲應該指出的是,數據有一個R包** data.table **,它創建類data.table的數據對象。目前尚不清楚您是否非正式使用術語「數據表」,實際上是指數據框架**,還是實際詢問** data.table **對象。 – Ista 2011-03-05 16:37:31

回答

43

一些建設數據

DF < - data.frame(名稱= C( 「John」 的 「亞當」),日期= C(3,5))

提取準確匹配:

subset(df, date>4 & date<6) 

    name date 
2 Adam 5 

以下語法產生相同的結果:

df[df$date>4 & df$date<6, ] 

    name date 
2 Adam 5 
+0

你們兩個都有我正在尋找的東西。謝謝! – poundifdef 2011-03-05 16:30:21

14

很多選項在這裏,但最容易遵循的之一是subset。考慮:

> set.seed(43) 
> df <- data.frame(name = sample(letters, 100, TRUE), date = sample(1:500, 100, TRUE)) 
> 
> subset(df, date > 5 & date < 15) 
    name date 
11 k 10 
67 y 12 
86 e 8 

您還可以直接將邏輯插入data.frame的索引。逗號將行與列分隔開。我們必須記住,R首先索引行,然後索引列。所以在這裏我們要說的與日行> 5 & < 15,然後所有列:

df[df$date > 5 & df$date < 15 ,] 

我也建議檢查出的子集,?subset幫助頁面和邏輯運算符?"&"

+0

subset() - 正是我在找的東西。謝謝! – poundifdef 2011-03-05 16:29:45