R语言 通过给定条件过滤DataFrame列

R语言 通过给定条件过滤DataFrame列

在这篇文章中,我们将看到如何通过给定的条件在R编程语言中选择数据框架列。R数据框架列可以受到约束,并产生较小的子集。然而,当条件被应用时,以下属性被保持。

  • 数据框架的行保持不被修改。
  • 数据框架的属性被保留下来。
  • 输出列是输入列的一个子集。

方法1:使用索引方法

聚合方法可以在数据框架的列上应用,满足表达式评估的列作为输出返回。结果数据框是数据框的一个子集,其中所选列的所有行都被保留。修改后的数据框必须存储在一个新的变量中,以便保留变化。例如,colSums()被用来计算属于某一列的所有元素的总和。

例1: 下面的程序返回其元素之和大于10的列。

# declaring a data frame
data_frame = data.frame(col1 = c(0 : 4) ,
                        col2 = c(0, 2, -1, 4, 8),
                        col3 = c(9 : 13))
 
print ("Original dataframe")
print (data_frame)
 
# where column sum is greater than 10
data_frame_mod <- data_frame[colSums(data_frame)>10]
print ("Modified dataframe")
print (data_frame_mod)

输出

[1] "Original dataframe"
 col1 col2 col3
1    0    0    9
2    1    2   10
3    2   -1   11
4    3    4   12
5    4    8   13
[1] "Modified dataframe"
 col2 col3
1    0    9
2    2   10
3   -1   11
4    4   12
5    8   13

例2: 下面的程序检查col1的值与2的模数运算是否不等于0。

# declaring a data frame
data_frame = data.frame(col1 = c(0 : 4) ,
                        col2 = c(0, 2, -1, 4, 8),
                        col3 = c(9 : 13))
 
print ("Original dataframe")
print (data_frame)
 
# where column sum is greater than 10
data_frame_mod <- data_frame[data_frame$col1 %% 2 != 0, ]
print ("Modified dataframe")
print (data_frame_mod)

输出

[1] "Original dataframe"
 col1 col2 col3
1    0    0    9
2    1    2   10
3    2   -1   11
4    3    4   12
5    4    8   13
[1] "Modified dataframe"
 col1 col2 col3
2    1    2   10
4    3    4   12

方法2:使用dplyr包

dplyr库可以被安装并加载到工作空间,用来进行数据操作。

install.packages("dplyr")

select_if()函数用于生成数据框的一个子集,保留所有满足指定条件的行。R中的select_if()方法既可以应用于分组的数据,也可以应用于未分组的数据。表达式包括比较运算符(==, >, >= ),逻辑运算符(&, |, !, xor()),范围运算符(between(), near()),以及针对列值的NA值检查。子集数据框必须保留在一个单独的变量中。

df %>% select_if(condition)

例1: 下面的程序返回数据框架的数字列,当受到select_if()方法的影响。

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)
                        col4 = c(1 : 5))
 
print ("Original dataframe")
print (data_frame)
print ("Modified dataframe")
 
# selecting numeric columns
data_frame %>% select_if(is.numeric)

输出

[1] "Original dataframe"
  col1 col2 col3   col4
1    b    0  TRUE    1
2    b    2  FALSE    2
3    d    1  FALSE    3
4    e    4  TRUE    4
5    e    5  TRUE    5
[1] "Modified dataframe"
   col2 col4
1    0  1
2    2  2
3    1  3
4    4  4
5    5  5

例2: 下面的程序返回其元素之和小于10的列。

library ("dplyr")
 
# declaring a data frame
data_frame = data.frame(col1 = c(-1, -2, -2, 0, 0) ,
                        col2 = c(0, 2, 1, 4, 5),
                        col3 = c(1 : 5))
print ("Original dataframe")
print (data_frame)
print ("Modified dataframe")
 
# select columns where column sum is less than 10
data_frame %>% select_if(colSums(data_frame) < 10)

输出

[1] "Original dataframe" 
  col1 col2 col3 
1   -1    0    1 
2   -2    2    2 
3   -2    1    3 
4    0    4    4 
5    0    5    5  
[1] "Modified dataframe" 
  col1
1   -1 
2   -2 
3   -2 
4    0 
5    0

方法3:使用subset()方法

subset()方法可以用来返回一个满足指定约束条件的记录集。subset()方法并不修改行的出现顺序。

语法: subset ( df , condition)

参数:

  • df – 数据框架
  • condition – 要应用的约束条件

%in%操作符可以用来检查值是否出现在一个值的向量中。返回一个布尔值,取决于该元素是否存在。

val %in% vector
# declaring a data frame
data_frame = data.frame(col1 = c(0 : 4) ,
                        col2 = c(0, 2, -1, 4, 8),
                        col3 = c(9 : 13))
print ("Original dataframe")
print (data_frame)
 
# where column sum is greater than 10
data_frame_mod <- subset(data_frame,
                         col3 %in% c(9, 10, 13))
print ("Modified dataframe")
print (data_frame_mod)

输出

[1] "Original dataframe"
 col1 col2 col3
1    0    0    9
2    1    2   10
3    2   -1   11
4    3    4   12
5    4    8   13
[1] "Modified dataframe"
 col1 col2 col3
1    0    0    9
2    1    2   10
5    4    8   13

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程