R语言 如何通过列中的值过滤R数据框架
在R编程语言中,数据框架列可以受到约束,并产生较小的子集。然而,当条件被应用时,以下属性被保持。
- 行被认为是输入的一个子集。
- 子集中的行以与原始数据框架相同的顺序出现。
- 列保持不被修改。
- 根据条件,组的数量可以减少。
- 在数据过滤过程中,数据框架属性被保留。
方法1:使用数据框架索引
R编程语言中的任何数据框架列都可以通过其名称df$col-name或使用其在数据框架中的索引位置df[col-index]来引用。然后,这一列的单元格值可以受到约束、逻辑或比较条件的影响,然后可以得到一个数据框架子集。这些条件被应用于数据框架的行索引,这样就可以返回满足的行。
- 基于对缺失值或NA的检查的选择
数据框架中的单元格可以包含缺失值或NA作为其元素,它们可以使用R语言中的is.na()方法进行验证。
例子 。
# declaring a dataframe
data_frame = data.frame(col1 = c(NA,"b",NA,"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 are not NA
data_frame_mod <- data_frame[!is.na(data_frame$col1),]
print ("Modified dataframe")
print (data_frame_mod)
输出
[1] “Original dataframe”
col1 col2 col3
1 <NA> 0 TRUE
2 b 2 FALSE
3 <NA> 1 FALSE
4 e 4 TRUE
5 e 5 TRUE
[1] “Modified dataframe”
col1 col2 col3
2 b 2 FALSE
4 e 4 TRUE
5 e 5 TRUE
- 基于一个列的单一比较条件的选择
列的值可以受到约束,以过滤和细分数据。这些值可以被映射到特定的出现或在一个范围内。
例子 。
# declaring a dataframe
data_frame = data.frame(col1 = c("b","b","e","e","e") ,
col2 = c(0,2,1,4,5),
col3= c(TRUE,FALSE,FALSE,TRUE, TRUE))
print ("Original dataframe")
print (data_frame)
# checking which columns have col3
# value equivalent to true
data_frame_mod <- data_frame[data_frame$col3==TRUE,]
print ("Modified dataframe")
print (data_frame_mod)
输出
[1] “Original dataframe”
col1 col2 col3
1 b 0 TRUE
2 b 2 FALSE
3 e 1 FALSE
4 e 4 TRUE
5 e 5 TRUE
[1] “Modified dataframe”
col1 col2 col3
1 b 0 TRUE
4 e 4 TRUE
5 e 5 TRUE
- 基于一个列的多个比较条件的选择
列值可以受到约束,以过滤和子集数据。这些条件可以通过逻辑上的&或|运算符来组合。这里使用了%in%运算符,以便检查与指定向量中任何一个值相匹配的值。
例子 。
# declaring a dataframe
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 or e
data_frame_mod <- data_frame[data_frame$col1 %in% c("b","e"),]
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 e 5 TRUE
[1] “Modified dataframe”
col1 col2 col3
1 b 0 TRUE
2 b 2 FALSE
4 e 4 TRUE
5 e 5 TRUE
方法2:使用dplyr库
dplyr库可以被安装并加载到工作空间,用来进行数据操作。
filter()函数被用来产生数据框架的子集,保留所有满足指定条件的行。R中的filter()方法可以应用于分组和未分组的数据。表达式包括比较运算符(==, >, >= ),逻辑运算符(&, |, !, xor()),范围运算符(between(), near()),以及针对列值的NA值检查。子集数据框架必须保留在一个单独的变量中。
语法。
filter(df , cond)
参数:
df – 数据框架对象
cond – 用于过滤数据的条件
例子 。
library ("dplyr")
# declaring a dataframe
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 or e
data_frame_mod <- filter(data_frame,col2>1)
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 e 5 TRUE
[1] “Modified dataframe”
col1 col2 col3
1 b 2 FALSE
2 e 4 TRUE
3 e 5 TRUE
另外,可以使用%in%操作符检查数值,使列单元格的数值与输入指定矢量中包含的元素相匹配。
例子 。
library ("dplyr")
# declaring a dataframe
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 or e
data_frame_mod <- filter(data_frame,col1 %in% c("b","e"))
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 e 5 TRUE
[1] “Modified dataframe”
col1 col2 col3
1 b 0 TRUE
2 b 2 FALSE
4 e 4 TRUE
5 e 5 TRUE