根据here中先前的问题,并进行进一步的统计分析,我想知道是否可以删除>= 3数据帧中存在的公共峰值。
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数据帧中存在的公共峰值,并提供所需的输出:
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"))发布于 2021-04-21 17:23:48
如果“峰值”值在每个数据集中是唯一的,则将数据集绑定到单个数据(bind_rows)中,获取“峰值”的count,将“n”小于3的行filter,并将这些“峰值”元素pull
library(dplyr)
to_keep <- bind_rows(a, b, c, d, e, .id = 'grp') %>%
count(peak) %>%
filter(n < 3) %>%
pull(peak)现在我们更新全局env中的对象(不推荐),在基于‘assign’的峰值对这些元素进行subset之后使用subset
for(obj in letters[1:5]) {
assign(obj, subset(get(obj), peak %in% to_keep))
}或者将对象保存在list和子集中。
library(purrr)
lst1 <- lst(a, b, c, d, e) %>%
map(~ .x %>%
filter(peak %in% to_keep))发布于 2021-04-21 17:35:43
在R基,你可以:
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]))而不是将它们转换到环境中。
发布于 2021-04-21 20:37:20
另一个基本R选项
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)
}
)这样的话
[[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 peak9https://stackoverflow.com/questions/67200590
复制相似问题