【问题标题】:R: Select values from data table in rangeR:从范围内的数据表中选择值
【发布时间】:2011-03-05 16:04:26
【问题描述】:

我在 R 中有一个数据表:

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

我想获取日期范围内的所有行。在 SQL 中,我可能会说SELECT * FROM mytable WHERE date > 5 AND date < 15

在 R 中,根据特定列中的值范围选择行的等价物是什么?

【问题讨论】:

  • 请注意,sqldf 包允许您将 SQL 应用于 R 数据帧。例如library(sqldf); sqldf("select * from mytable where date > 5 and date < 15") 。请参阅sqldf.googlecode.com 的主页。
  • @G。格洛腾迪克很酷;我想有人写过这样的东西,谢谢你的链接
  • 我觉得应该注意的是data里面有个R包data.table,它创建了data.table类的数据对象。不清楚您是在非正式地使用术语“数据表”并且实际上是指 data.frame,还是您实际上是在询问 data.table 对象。跨度>
  • @Ista 我使用的是 data.table,但后来使用 as.data.frame(mytable) 以与下面的答案保持一致。

标签: r


【解决方案1】:

构造一些数据

df

提取完全匹配:

subset(df, date==3)

  name date
1 John    3

提取范围内的匹配项:

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

  name date
2 Adam    5

以下语法产生相同的结果:

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

  name date
2 Adam    5

【讨论】:

  • 你们俩都拥有我想要的东西。谢谢!
【解决方案2】:

这里有很多选项,但最容易理解的选项之一是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 &

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

我还建议您查看子集的帮助页面,?subset 和逻辑运算符 ?"&amp;"

【讨论】:

  • subset() - 正是我想要的。谢谢!
【解决方案3】:

人们还应该考虑另一种直观的方法,使用来自dplyrfilter()。下面是一些例子:

set.seed(123)
df <- data.frame(name = sample(letters, 100, TRUE),
                 date = sample(1:500, 100, TRUE))
library(dplyr)
filter(df, date < 50) # date less than 50
filter(df, date %in% 50:100) # date between 50 and 100
filter(df, date %in% 1:50 & name == "r") # date between 1 and 50 AND name is "r"
filter(df, date %in% 1:50 | name == "r") # date between 1 and 50 OR name is "r"

# You can also use the pipe (%>%) operator
df %>% filter(date %in% 1:50 | name == "r")

【讨论】:

  • date %in% 1:50 检查日期是否包含在 1 到 50 之间的整数序列向量中,不是它是否在这两个端点之间的连续间隔中。例如3.5 %in% 1:50 评估为假
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
相关资源
最近更新 更多