如何从 R 中的 DataFrame 中删除子集?
子集是由原始数据帧形成的较小数据帧的单元组合。可以从原始数据框中移除一组行和列,以减少数据框的一部分。子集移除可以基于行和列所受到的约束。在本文中,我们将看到如何在 R 编程语言中从 DataFrame 中删除子集。
方法一:使用 anti_join() 方法。
此包中的 anti_join() 方法用于返回第一个数据帧中没有 y 匹配值的所有行,仅保留第一个数据帧中的列。它基本上是一个选择和过滤工具。返回的结果中不保留原始数据框的行号。
Syntax: anti_join ( x , y , by = c(..))
Arguments :
- x : The first data frame
- y : The second data frame
- by (Optional ) : To consider which column as the key for filtering data.
Returns : The first data frame rows that are not in second data frame.
代码:
R
# 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)
R
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)
R
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_frame$col4 %in% subset$col2, ]
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%运算符用于检查向量中是否存在某个值。如果该值存在,则返回一个逻辑值,否则返回 False。
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_frame$col4 %in% subset$col2, ]
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