gpt4 book ai didi

r - 在 dplyr 中使用 filter_ ,其中字段和值都在变量中

转载 作者:行者123 更新时间:2023-12-04 00:06:33 24 4
gpt4 key购买 nike

我想使用在变量中定义的字段过滤数据框,以选择也在变量中的值。说我有

df <- data.frame(V=c(6, 1, 5, 3, 2), Unhappy=c("N", "Y", "Y", "Y", "N"))
fld <- "Unhappy"
sval <- "Y"

我想要的值是 df[df$Unhappy == "Y", ] .

我已阅读 nse小插图尝试使用 filter_但不能完全理解。我试过
df %>% filter_(.dots = ~ fld == sval)

什么都没有返回。我得到了我想要的
df %>% filter_(.dots = ~ Unhappy == sval)

但显然这违背了使用变量来存储字段名称的目的。请问有什么线索吗?最终我想用这个 where fld是字段名称和 sval 的向量是 fld 中每个字段的过滤器值向量.

最佳答案

你可以试试 interp来自 lazyeval

 library(lazyeval)
library(dplyr)
df %>%
filter_(interp(~v==sval, v=as.name(fld)))
# V Unhappy
#1 1 Y
#2 5 Y
#3 3 Y

对于多个键/值对,我发现这是可行的,但我认为应该有更好的方法。
  df1 %>% 
filter_(interp(~v==sval1[1] & y ==sval1[2],
.values=list(v=as.name(fld1[1]), y= as.name(fld1[2]))))
# V Unhappy Col2
#1 1 Y B
#2 5 Y B

对于这些情况,我找到了 base R选择更容易。例如,如果我们尝试 filter基于'fld1'中'key'变量和'sval1'中对应值的行,一种选择是使用 Map .我们对数据集 ( df1[fld1] ) 进行子集化并将 FUN ( == ) 应用于 df1[f1d1] 的每一列在 'sval1' 中使用相应的值并使用 &Reduce获得可用于 filter 的逻辑向量'df1' 的行。
 df1[Reduce(`&`, Map(`==`, df1[fld1],sval1)),]
# V Unhappy Col2
# 2 1 Y B
#3 5 Y B

数据
df1 <- cbind(df, Col2= c("A", "B", "B", "C", "A"))
fld1 <- c(fld, 'Col2')
sval1 <- c(sval, 'B')

关于r - 在 dplyr 中使用 filter_ ,其中字段和值都在变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31760134/

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