子选择R中范围的数据帧

时间:2015-07-18 18:13:41

标签: r subset

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

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

我想理解为什么我会这样做以及如何解决它。

2 个答案:

答案 0 :(得分:4)

您似乎有两个错误,请尝试这样做:

 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

第二个,就是你错过了一个逗号(“,”)。首先编写子集的条件,然后编写逗号,然后编写任何内容,将选择满足此条件的rows

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

答案 1 :(得分:1)

只是为了添加一些解决方案,还有其他方法可以做到这一点。另一种方法是subset函数和/或%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