子选择 R 中范围内的数据框

Sub selecting a data frame on a range in R

如果我使用以下方法创建一个简单的数据框:

x <- 1:100
y <- x*2
df <- data.frame(x,y)

然后我尝试通过执行以下操作子选择 x>30 和 x<40 的位置

df[df$x>30 && df$x<40]

我得到:

data frame with 0 columns and 100 rows

我想知道我为什么会遇到这个问题以及如何解决它。

您似乎有两个错误,试试这个:

 df[df$x>30 & df$x<40,]
#     x  y
# 31 31 62
# 32 32 64
# 33 33 66
# 34 34 68
# 35 35 70
# 36 36 72
# 37 37 74
# 38 38 76
# 39 39 78

解释:

第一个错误是您使用的是 && 而不是 &。如果您确定比较长度为 1 的向量,则需要第一种形式。 See this question for details.

第二个,您缺少一个逗号 (",")。先写子集的条件,再写逗号,什么都不写,就会select满足这个条件的rows

当您尝试 df[]df[1,]df[,1] 时,您可以检查具有相同 df 的子集的差异。

只是为了添加一些解决方案,还有其他方法可以这样做。另一种方法是使用 subset 函数 and/or 和 %in% (注意不同的行为):

subset(df, x > 30 & x < 40)
subset(df, x %in% c(31:39))
df[df$x %in% c(31:39), ]

dplyr:

library(dplyr)
# Standart dplyr notation
df %>% filter(x > 30, x < 40)
# Non-Standart dplyr notation
df %>% filter(x > 30 & x < 40)

结果都一样:

    x  y
31 31 62
32 32 64
33 33 66
34 34 68
35 35 70
36 36 72
37 37 74
38 38 76
39 39 78