R语言 如何从数据框架中删除一个子集
子集是一个单元格的组合,形成一个较小的数据框架,从原始数据框架中形成。一组行和列可以从原始数据框架中移除,以减少数据框架的一部分。子集的移除可以基于行和列所受到的约束。在这篇文章中,我们将看到如何在R编程语言中从数据框架中移除子集。
方法1:使用anti_join()方法
这个包中的anti_join()方法是用来返回第一个数据框中所有在y中没有匹配值的行,只保留第一个数据框中的列。它基本上是一个选择和过滤工具。原始数据框的行号不会保留在返回的结果中。
语法:anti_join ( x , y , by = c(..))
参数 :
- x : 第一个数据框
- y :第二个数据框
- by(可选)。要考虑哪一列作为过滤数据的关键。
返回: 第一个数据框中不在第二个数据框中的行。
代码
# loading the library
library("dplyr")
# declaring data frame
data_frame <- data.frame(col1 = c(2, 4, 6, 10),
col2 = c(4, 6, 8, 5),
col3 = c(8, 10, 12, 20),
col4 = letters[1 : 4])
print ("Original Dataframe")
print (data_frame)
# creating subset dataframe
subset <- data.frame(col1 = c(2 , 6),
col2 = c(4 , 8))
# removing subset data frame
data_frame_mod <- anti_join(data_frame,subset)
print ("Modified Dataframe")
print (data_frame_mod)
输出
[1] "Original Dataframe"
col1 col2 col3 col4
1 2 4 8 a
2 4 6 10 b
3 6 8 12 c
4 10 5 20 d
[1] "Modified Dataframe"
col1 col2 col3 col4
1 4 6 10 b
2 10 5 20 d
如果第二个数据框的列属于第一个数据框的不同行,我们可以使用anti_join()方法中的 “by “参数指定要取的列值。
library("dplyr")
# declaring data frame
data_frame <- data.frame(col1 = c(2, 4, 6, 10),
col2 = c(4, 6, 8, 5),
col3 = c(8, 10, 12, 20),
col4 = letters[1 : 4])
print ("Original Dataframe")
print (data_frame)
subset <- data.frame(col1 = c(2 , 4),
col4 = c("a" , "d") )
data_frame_mod <- anti_join(data_frame,
subset, by = "col4")
print ("Modified Dataframe")
print (data_frame_mod)
输出
[1] "Original Dataframe"
col1 col2 col3 col4
1 2 4 8 a
2 4 6 10 b
3 6 8 12 c
4 10 5 20 d
[1] "Modified Dataframe"
col1 col2 col3 col4
1 4 6 10 b
2 6 8 12 c
方法2:使用%in%运算符
%in%运算符用于检查向量中是否存在一个值。如果该值存在,它将返回一个逻辑值,否则为假。
val %in% vec
第一个数据框的特定列在第二个数据框中被检查出数值,并返回在第二个数据框中不存在的行。在应用这个运算符的过程中,原始数据框的行号被保留。
library("dplyr")
# declaring data frame
data_frame <- data.frame(col1 = c(2, 4, 6, 10),
col2 = c(4, 6, 8, 5),
col3 = c(8, 10, 12, 20),
col4 = letters[1 : 4])
print ("Original Dataframe")
print (data_frame)
# creating second data frame
subset <- data.frame(col1 = c(2 , 4),
col2 = c("a" , "d"))
data_frame_mod <- data_frame[data_framecol4 %in% subsetcol2, ]
print ("Modified Dataframe")
print (data_frame_mod)
输出
[1] "Original Dataframe"
col1 col2 col3 col4
1 2 4 8 a
2 4 6 10 b
3 6 8 12 c
4 10 5 20 d
[1] "Modified Dataframe"
col1 col2 col3 col4
2 4 6 10 b
3 6 8 12 c