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