首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果一对值在列表中,则筛选数据

如果一对值在列表中,则筛选数据
EN

Stack Overflow用户
提问于 2018-09-05 18:26:12
回答 1查看 40关注 0票数 0

我需要过滤一个与学生课程相关的数据。

我想要做的是,得到所有的行(curr_code,当然不是组合),其中的组合是一个列表列表,其中包含所有要删除的可定位组合。

代码语言:javascript
复制
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"))
)

下面是我的部分数据(exp_data):

代码语言:javascript
复制
id  curr_code  course
1   81017      ICH2304
2   81017      IMM2003
3   81017      IIC1005
4   81016      ICH2304
5   81015      ICH2304
6   81015      IIC1005
7   81015      IBM1005

我应该得到:

代码语言:javascript
复制
id  curr_code  course
1   81017      IIC1005
2   81015      ICH2304
3   81015      IBM1005

我试着用:

代码语言:javascript
复制
new_data <- filter(exp_data, !(list.any(combinations, (course %in% exp) && (cod == curr_code))))

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-05 18:49:21

首先,将combinations作为嵌套列表处理会使事情变得复杂。如果可能的话,最好将它作为一个整洁的data.frame:

代码语言:javascript
复制
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

现在,我们可以逐行遍历exp_data,并将coursecurr_code的值与comb中的值匹配。which将返回该值所在的行号。通过获取这些行的intersect,可以得到行索引的向量,其中 coursecurr_code匹配。如果没有匹配,就会得到一个空向量。

因为我们正在寻找没有匹配的行,所以我们只需检查向量== 0== 0是否可以得到一个逻辑向量,告诉您哪些exp_data行在comb中没有匹配的行。我们可以简单地使用这个向量来子集exp_data,使用方括号表示法来得到我们想要的结果。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52191370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档