R:从数据表中选择范围内的值

epfja78i  于 2023-03-15  发布在  其他
关注(0)|答案(4)|浏览(135)

我在R中有一个数据表:

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

我想获取日期在某个范围内的所有行。在SQL中,我可能会说SELECT * FROM mytable WHERE date > 5 AND date < 15
在R中,根据特定列中的值的范围选择行的等价物是什么?

pw9qyyiw

pw9qyyiw1#

构造一些数据
df〈-数据.帧(名称=c(“约翰”,“亚当”),日期=c(3,5))
提取完全匹配项:

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
fruv7luv

fruv7luv2#

这里有很多选项,但最容易遵循的选项之一是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和逻辑运算符?"&"的帮助页面

k0pti3hp

k0pti3hp3#

您还应该考虑使用dplyr中的filter()的另一种直观方法。

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")
ua4mk5z4

ua4mk5z44#

使用dplyr的between的另一个选项如下(数据来自@andrie):

df <- data.frame(name=c("John", "Adam"), date=c(3, 5))

library(dplyr)
df %>%
  filter(between(date, 4, 6))
#>   name date
#> 1 Adam    5

df[between(df$date, 4, 6), ]
#>   name date
#> 2 Adam    5

创建于2023年3月11日,使用reprex v2.0.2

相关问题