删除与另一列中有条件的列匹配的行

时间:2020-07-17 02:46:15

标签: r dataframe

在两个数据集中,有一列匹配的值(一个文件中的每个值都有很多条目)。如何删除应该比较其他两列的行?

例如,Data2描述应设置为Data1的名称和条件。如果任何亚当条目的数量低于阈值11,请从Data1中删除该行。
数据1:

Name     Number
Adam     10  
Adam     5 
Adam     1 
Adam     20 
Bob      4  
Bob      11 
Bob      30 
Bob      50 

数据2:

Name     Threshold
Adam     11
Bob      20

所需的输出:

Name     Number
Adam     20 
Bob      30 
Bob      50 

3 个答案:

答案 0 :(得分:2)

使用data.table

library(data.table)
setDT(Data1)
Data1[Data2, on = .(Name, Number >= Threshold), .(Name, Number = x.Number)]

#    Name Number
# 1: Adam     20
# 2:  Bob     30
# 3:  Bob     50

数据

Data1 <- data.frame(
  Name = rep(c("Adam", "Bob"), each = 4),
  Number = c(10L, 5L, 1L, 20L, 4L, 11L, 30L, 50L)
)
Data2 <- data.frame(Name = c("Adam", "Bob"), Threshold = c(11L, 20L))

答案 1 :(得分:0)

您可以merge的两个数据框并选择Threshold上方的行。

这可以在基数R中完成:

subset(merge(df1, df2, by = 'Name') , Number >= Threshold)[names(df1)]

或使用dplyr

library(dplyr)

df1 %>%
  inner_join(df2, by = 'Name') %>%
  filter(Number >= Threshold) %>%
  select(-Threshold)

#  Name Number
#1 Adam     20
#2  Bob     30
#3  Bob     50

答案 2 :(得分:0)

这可以通过设置base R来完成:

Data1[-which(Data1$Name=="Adam" & Data1$Number <= Data2$Number[Data2$Name=="Adam"] |
              Data1$Name=="Bob" & Data1$Number <= Data2$Number[Data2$Name=="Bob"]),]
  Name Number
4 Adam     20
7  Bob     30
8  Bob     50
相关问题