gpt4 book ai didi

r - 寻找 dplyr 函数来有条件地应用过滤器

转载 作者:行者123 更新时间:2023-12-03 15:42:46 25 4
gpt4 key购买 nike

我有一个包含各种血液学值及其收集时间的数据框。这些值只能在特定时间收集,但偶尔会添加一个额外的值。我想删除在计划时间之外收集值的任何实例。

为了说明这个问题,这里有一些代码来创建我正在使用的数据框的一个非常简化的版本(加上一些示例时间表):

example <- tibble("Parameter" = c(rep("hgb", 3), rep("bili", 3), rep("LDH", 3)), 
"Collection" = c(1, 3, 4, 1, 5, 6, 0, 4, 8))

hgb_sampling <- c(1, 4)
bili_sampling <- c(1, 5)
ldh_sampling <- c(0, 4)


因此,我需要一种方法来根据 Parameter 列中的值有条件地应用过滤器。该解决方案需要适合 dyplr 管道并产生如下内容:
filtered <- tibble("Parameter" = c(rep("hemoglobin", 2), rep("bilirubin", 2), rep("LDH", 2)), 
"Collection" = c(1, 4, 1, 5, 0, 4))

我已经尝试了几件事(它们都类似于下面的内容),但是“参数”的使用会使事情出错:
df <- example %>%
{if (Parameter == "hgb") filter(., Collection %in% hgb_sampling)}

有什么建议?

最佳答案

你可以创建一个引用标题,加入 example并只保留选定的行。

library(dplyr)

ref_df <- tibble::tibble(Parameter = c("hgb","bili", "LDH"),
value = list(c(1, 4), c(1, 5), c(0, 4)))

example %>%
inner_join(ref_df, by = 'Parameter') %>%
group_by(Parameter) %>%
filter(Collection %in% unique(unlist(value))) %>%
select(Parameter, Collection)

# Parameter Collection
# <chr> <dbl>
#1 hgb 1
#2 hgb 4
#3 bili 1
#4 bili 5
#5 LDH 0
#6 LDH 4

关于r - 寻找 dplyr 函数来有条件地应用过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60861966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com