按给定条件过滤 R 中的 DataFrame 列
在本文中,我们将看到如何在 R 编程语言中根据给定条件选择 DataFrame 列。 R 数据框列可以受到约束,并产生更小的子集。但是,在应用条件时,仍会保持以下属性:
- 数据框的行保持不变。
- 保留数据框属性。
- 输出列是输入列的子集,
方法 1:使用索引方法
聚合方法可以应用于数据框的列,满足表达式求值的列将作为输出返回。结果数据框是数据框的一个子集,其中所有行都保留为所选列。修改后的数据框必须存储在新变量中以保留更改。例如, colSums() 用于计算属于一列的所有元素的总和。
示例 1:以下程序返回其元素总和大于 10 的列:
R
# 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)
R
# 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)
R
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)
R
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)
R
# 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"
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
方法二:使用dplyr包
dplyr 库可以安装并加载到用于执行数据操作的工作空间中。
install.packages("dplyr")
select_if()函数用于生成数据框的子集,保留满足指定条件的所有行。 R 中的 select_if() 方法可以应用于分组和未分组的数据。表达式包括运算符(==,>,> =),逻辑运算符(&,|!,XOR()),运算符范围(()之间,邻近())以及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
方法三:使用subset()方法
subset() 方法可用于返回一组满足指定约束的行。 subset() 方法不会修改行出现的顺序。
Syntax: subset ( df , condition)
Arguments :
- df – The dataframe
- condition – The constraints to be applied
%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