R语言 如何通过多个条件过滤R数据框
在R编程语言中,数据框架列可以受到约束,并产生较小的子集。然而,当条件被应用时,以下属性被保持。
- 行被认为是输入的一个子集。
- 子集中的行以与原始数据框架相同的顺序出现。
- 列保持不被修改。
- 根据条件,组的数量可以减少。
- 在数据过滤过程中,数据框架的属性被保留下来。
- 行数可能不会在最终输出中被保留。
通过使用逻辑运算符,如AND (&) , OR (|),数据框架的行可以受制于多个条件。返回 “true “的行将被保留在最终的输出中。
方法1:使用索引方法和 which() 函数
R中的任何数据框架列都可以通过其名称df$col-name或使用其在数据框架中的索引位置df[col-index]来引用。然后,这一列的单元格值可以受到约束、逻辑或比较条件的影响,然后可以获得数据框架子集。这些条件被应用到数据框的行索引上,这样就可以返回满足的行。多个条件也可以使用R中的which()方法进行组合。R中的which()函数返回满足指定条件的值的位置。
语法: which( vec, arr.ind = F)
参数:
vec – 受条件限制的向量
%in%运算符用于检查指定向量中的一个值。
语法 。
val %in% vec
例子 。
# declaring a data frame
data_frame = data.frame(col1 = c("b","b","d","e","d") ,
col2 = c(0,2,1,4,5),
col3= c(TRUE,FALSE,FALSE,TRUE, TRUE))
print ("Original dataframe")
print (data_frame)
# checking which values of col1 are
# equivalent to b or e or the col2
# value is greater than 4
data_frame_mod <- data_frame[which(data_framecol1 %in% c("b","e")
| data_framecol2 > 4),]
print ("Modified dataframe")
print (data_frame_mod)
输出
[1] "Original dataframe"
col1 col2 col3
1 b 0 TRUE
2 b 2 FALSE
3 d 1 FALSE
4 e 4 TRUE
5 d 5 TRUE
[1] "Modified dataframe"
col1 col2 col3
1 b 0 TRUE
2 b 2 FALSE
4 e 4 TRUE
5 d 5 TRUE
这些条件可以汇总在一起,不需要使用哪种方法也可以。
例子 。
# declaring a data frame
data_frame = data.frame(col1 = c("b","b","d","e","d") ,
col2 = c(0,2,1,4,5),
col3= c(TRUE,FALSE,FALSE,TRUE, TRUE))
print ("Original dataframe")
print (data_frame)
# checking which values of col1
# are equivalent to b or e
data_frame_mod <- data_frame[data_framecol1 %in% c("b","e")
& data_framecol2 > 4,]
print ("Modified dataframe")
print (data_frame_mod)
输出
[1] "Original dataframe"
col1 col2 col3
1 b 0 TRUE
2 b 2 FALSE
3 d 1 FALSE
4 e 4 TRUE
5 d 5 TRUE
[1] "Modified dataframe"
[1] col1 col2 col3
<0 rows> (or 0-length row.names)
方法2:使用dplyr包
dplyr库可以被安装并加载到工作空间,用来进行数据操作。filter()函数被用来产生数据框架的子集,保留所有满足指定条件的行。R中的filter()方法可以应用于分组和未分组的数据。表达式包括比较运算符(==, >, >= ),逻辑运算符(&, |, !, xor()),范围运算符(between(), near()),以及针对列值的NA值检查。子集数据框必须保留在一个单独的变量中。
语法: filter(df , cond)
参数:
df – 数据框对象
cond – 用于过滤数据的条件
这种方法在应用上的不同之处在于,它不保留数据框的原始行号。
例子 。
library ("dplyr")
# declaring a data frame
data_frame = data.frame(col1 = c("b","b","d","e","e") ,
col2 = c(0,2,1,4,5),
col3= c(TRUE,FALSE,FALSE,TRUE, TRUE))
print ("Original dataframe")
print (data_frame)
# checking which values of col1 are
# equivalent to b and col3 is not
# TRUE
data_frame_mod <- filter(
data_frame,col1 == "b" & col3!=TRUE)
print ("Modified dataframe")
print (data_frame_mod)
输出
[1] "Original dataframe"
col1 col2 col3
1 b 0 TRUE
2 b 2 FALSE
3 d 1 FALSE
4 e 4 TRUE
5 d 5 TRUE
[1] "Modified dataframe"
col1 col2 col3
1 b 2 FALSE
方法3:使用子集方法
基准R中的subset()方法是用来返回满足应用条件的向量、矩阵或数据帧的子集。subset()方法关注的是行。在应用此方法时,行号将被保留。
语法: subset(df , cond)
参数:
df – 数据框对象
cond – 用于过滤数据的条件
例子 。
# declaring a data frame
data_frame = data.frame(col1 = c("b","b","d","e","d") ,
col2 = c(0,2,1,4,5),
col3= c(TRUE,FALSE,FALSE,TRUE, TRUE))
print ("Original dataframe")
print (data_frame)
# checking which values of col1 are
# equivalent to b or col2 value is
# greater than 4
data_frame_mod <- subset(data_frame, col1=="b" | col2 > 4)
print ("Modified dataframe")
print (data_frame_mod)
输出
[1] "Original dataframe"
col1 col2 col3
1 b 0 TRUE
2 b 2 FALSE
3 d 1 FALSE
4 e 4 TRUE
5 d 5 TRUE
[1] "Modified dataframe"
col1 col2 col3
1 b 0 TRUE
2 b 2 FALSE
5 d 5 TRUE