如果一对值位于列表的列表中,则筛选dataframe
我需要过滤与学生课程相关的数据框 我希望做的是获取所有行,其中([curr_code,course]不是组合),其中组合是一个列表列表,包含所有可能要删除的组合如果一对值位于列表的列表中,则筛选dataframe,r,filter,subset,R,Filter,Subset,我需要过滤与学生课程相关的数据框 我希望做的是获取所有行,其中([curr_code,course]不是组合),其中组合是一个列表列表,包含所有可能要删除的组合 combinations <- list( hydraulics = list(cod = 81017, exp = list("ICH2304", "IMM2003")), cience = list(cod = 81016, exp = list("ICH2304")), data_science = list(c
combinations <- list(
hydraulics = list(cod = 81017, exp = list("ICH2304", "IMM2003")),
cience = list(cod = 81016, exp = list("ICH2304")),
data_science = list(cod = 81015, exp = list("IIC1005"))
)
我应该得到:
id curr_code course
1 81017 IIC1005
2 81015 ICH2304
3 81015 IBM1005
我尝试使用:
new_data <- filter(exp_data, !(list.any(combinations, (course %in% exp) && (cod == curr_code))))
new_data首先,将组合作为嵌套列表使用会使事情变得复杂。如果可能,最好将其作为一个整洁的data.frame:
comb <- data.frame(name = c('hydraulics','hydraulics','cience','data_science'),
cod = c(81017, 81017, 81016, 81015),
exp = c("ICH2304", "IMM2003", "ICH2304", "IIC1005"))
comb
name cod exp
1 hydraulics 81017 ICH2304
2 hydraulics 81017 IMM2003
3 cience 81016 ICH2304
4 data_science 81015 IIC1005
comb <- data.frame(name = c('hydraulics','hydraulics','cience','data_science'),
cod = c(81017, 81017, 81016, 81015),
exp = c("ICH2304", "IMM2003", "ICH2304", "IIC1005"))
comb
name cod exp
1 hydraulics 81017 ICH2304
2 hydraulics 81017 IMM2003
3 cience 81016 ICH2304
4 data_science 81015 IIC1005
rows_no_match <- apply(exp_data, 1, function(x) {
length(intersect(which(x[['course']] == comb$exp),
which(x[['curr_code']] == comb$cod))) == 0
})
exp_data[rows_no_match,]
id curr_code course
3 3 81017 IIC1005
5 5 81015 ICH2304
7 7 81015 IBM1005