在两个数据集中,有一列匹配的值(一个文件中的每个值都有很多条目)。如何删除应该比较其他两列的行?
例如,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
答案 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