📜  如何从 R 中的 DataFrame 中删除子集?

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

如何从 R 中的 DataFrame 中删除子集?

子集是由原始数据帧形成的较小数据帧的单元组合。可以从原始数据框中移除一组行和列,以减少数据框的一部分。子集移除可以基于行和列所受到的约束。在本文中,我们将看到如何在 R 编程语言中从 DataFrame 中删除子集。

方法一:使用 anti_join() 方法。

此包中的 anti_join() 方法用于返回第一个数据帧中没有 y 匹配值的所有行,仅保留第一个数据帧中的列。它基本上是一个选择和过滤工具。返回的结果中不保留原始数据框的行号。

代码:

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