2011-03-05 56 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