gpt4 book ai didi

R dplyr。过滤包含一列数字向量的数据框

转载 作者:行者123 更新时间:2023-12-04 11:58:58 27 4
gpt4 key购买 nike

我有一个数据框,其中一列包含数字向量。我想根据涉及该列的条件过滤行。这是一个简化的示例。

df <- data.frame(id = LETTERS[1:3], name=c("Alice", "Bob", "Carol"))
mylist=list(c(1,2,3), c(4,5), c(1,3,4))
df$numvecs <- mylist
df
# id name numvecs
# 1 A Alice 1, 2, 3
# 2 B Bob 4, 5
# 3 C Carol 1, 3, 4

我可以使用类似 mapply 的东西,例如

mapply(function(x,y) x=="B" & 4 %in% y, df$id, df$numvecs)

第二行正确返回 TRUE,第一行和第二行正确返回 FALSE。

但是,我有理由想使用 dplyr 过滤器而不是 mapply,但我无法让 dplyr 过滤器在 numvecs 列上正确运行。以下不返回任何行,而不是返回两行。

filter(df, 4 %in% numvecs)
# [1] id numvecs
# <0 rows> (or 0-length row.names)

我在这里错过了什么?如何筛选涉及 numvecs 列的条件表达式?

理想情况下,我也想使用非标准评估 filter_,这样我就可以将过滤条件作为参数传递。任何帮助表示赞赏。谢谢。

最佳答案

我们仍然可以使用 mapplyfilter

filter(df, mapply(function(x,y) x == "B" & 4 %in% y, id, numvecs))
# id name numvecs
#1 B Bob 4, 5

或者使用 purrr 中的 map

library(purrr)
filter(df, unlist(map(numvecs, ~4 %in% .x)))
# id name numvecs
#1 B Bob 4, 5
#2 C Carol 1, 3, 4

或者我们也可以在链上这样做

df %>%
.$numvecs %>%
map( ~ 4 %in% .x) %>%
unlist %>%
df[.,]
# id name numvecs
#2 B Bob 4, 5
#3 C Carol 1, 3, 4

关于R dplyr。过滤包含一列数字向量的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38677497/

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