R语言 如何通过多个条件过滤R数据框

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程