📜  按给定条件过滤 R 中的 DataFrame 列

📅  最后修改于: 2022-05-13 01:55:00.245000             🧑  作者: Mango

按给定条件过滤 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() 方法不会修改行出现的顺序。

%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