首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从5中删除=.>3数据帧中的公共元素

如何从5中删除=.>3数据帧中的公共元素
EN

Stack Overflow用户
提问于 2021-04-21 17:18:44
回答 3查看 49关注 0票数 2

根据here中先前的问题,并进行进一步的统计分析,我想知道是否可以删除>= 3数据帧中存在的公共峰值。

代码语言:javascript
复制
a <- data.frame(ID = c("1", "2", "3", "4", "5"), peak = c("peak1", "peak2", "peak3", "peak4", "peak10"))
b <- data.frame(ID = c("1", "2", "3", "4"), peak = c("peak1","peak3", "peak20", "peak21"))
c <- data.frame(ID = c("1", "2", "3"), peak = c("peak1", "peak5", "peak3"))
d <- data.frame(ID = c("1", "2", "3", "4", "5", "6"),peak = c("peak1", "peak3", "peak7", "peak8", "peak11", "peak12"))
e <- data.frame(ID = c("1", "2", "3"), peak = c("peak1", "peak3",  "peak9"))

我希望删除>= 3数据帧中存在的公共峰值,并提供所需的输出:

代码语言:javascript
复制
a <- data.frame(ID = c("1", "2", "3", "4", "5"), peak = c("peak2",  "peak4", "peak10"))
b <- data.frame(ID = c("1", "2", "3", "4"), peak = c("peak20", "peak21"))
c <- data.frame(ID = c("1", "2", "3"), peak = c( "peak5"))
d <- data.frame(ID = c("1", "2", "3", "4", "5", "6"),peak = c(  "peak7", "peak8", "peak11", "peak12"))
e <- data.frame(ID = c("1", "2", "3"), peak = c ("peak9"))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-04-21 17:23:48

如果“峰值”值在每个数据集中是唯一的,则将数据集绑定到单个数据(bind_rows)中,获取“峰值”的count,将“n”小于3的行filter,并将这些“峰值”元素pull

代码语言:javascript
复制
library(dplyr)
to_keep <- bind_rows(a, b, c, d, e, .id = 'grp') %>%
             count(peak) %>% 
             filter(n < 3) %>% 
             pull(peak)

现在我们更新全局env中的对象(不推荐),在基于‘assign’的峰值对这些元素进行subset之后使用subset

代码语言:javascript
复制
for(obj in letters[1:5]) {
      assign(obj, subset(get(obj), peak %in% to_keep))
 }

或者将对象保存在list和子集中。

代码语言:javascript
复制
library(purrr)
lst1 <- lst(a, b, c, d, e) %>%
           map(~ .x %>%
                  filter(peak %in% to_keep))
票数 3
EN

Stack Overflow用户

发布于 2021-04-21 17:35:43

在R基,你可以:

代码语言:javascript
复制
my_list <- list(a = a, b = b, c = c, d = d, e = e)
y <-table(do.call(rbind, my_list)) < 3
list2env(lapply(my_list, function(x) subset(x, y[peak])), .GlobalEnv)

现在调用a或任何数据格式。

将结果保存在一份清单中是明智的。ie lapply(my_list, function(x) subset(x, y[peak]))而不是将它们转换到环境中。

票数 3
EN

Stack Overflow用户

发布于 2021-04-21 20:37:20

另一个基本R选项

代码语言:javascript
复制
lst <- list(a, b, c, d, e)
v <- names(Filter(function(x) x < 3, table(unlist(sapply(lst, `[[`, "peak")))))
lapply(
  lst,
  function(x) {
    subset(x, peak %in% v)
  }
)

这样的话

代码语言:javascript
复制
[[1]]
  ID   peak
2  2  peak2
4  4  peak4
5  5 peak10

[[2]]
  ID   peak
3  3 peak20
4  4 peak21

[[3]]
  ID  peak
2  2 peak5

[[4]]
  ID   peak
3  3  peak7
4  4  peak8
5  5 peak11
6  6 peak12

[[5]]
  ID  peak
3  3 peak9
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67200590

复制
相关文章

相似问题

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