子选择 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
如果我使用以下方法创建一个简单的数据框:
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