gpt4 book ai didi

r - dplyr 中 do() 函数的奇怪行为

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

我看到了 do 的奇怪行为函数在 dplyr 0.3.0.2,但也许我误解了一些东西。

我有一个看起来像的数据框

set.seed(668)
stuff <- data.frame(name=c(rep("Frodzak", 5), rep("Dumpf", 4), rep("Ackpth", 6)),
state=c("AL", "AK", "AL", "KS", "OR", "LA", "MS", "KY", "FL",
"NY", "NY", "NJ", "PA", "NJ", "NY"),
important=c(F, F, T, F, F, T, F, F, F, T, F, F, F, F, F),
girth=rnorm(15, 250, 80), stringsAsFactors=F)


stuff

name state important girth

1 Frodzak AL FALSE 148.5870
2 Frodzak AK FALSE 321.4144
3 Frodzak AL TRUE 224.8380
4 Frodzak KS FALSE 315.9416
5 Frodzak OR FALSE 331.4336
6 Dumpf LA TRUE 317.4794
7 Dumpf MS FALSE 170.4174
8 Dumpf KY FALSE 275.4033
9 Dumpf FL FALSE 240.9276
10 Ackpth NY TRUE 145.6290
11 Ackpth NY FALSE 267.6902
12 Ackpth NJ FALSE 171.4015
13 Ackpth PA FALSE 298.5841
14 Ackpth NJ FALSE 249.5764
15 Ackpth NY FALSE 276.5504

在我的应用程序中,将恰好有一个 TRUE在具有相同“名称”的每组行的“重要”列中。我想对 df 进行子集化,以便仅包含状态与“重要”行(在每个“名称”组内)的状态匹配的那些行。换句话说,我想得到
     name state important    girth
1 Ackpth NY TRUE 145.6290
2 Ackpth NY FALSE 267.6902
3 Ackpth NY FALSE 276.5504
4 Dumpf LA TRUE 317.4794
5 Frodzak AL FALSE 148.5870
6 Frodzak AL TRUE 224.8380

如果我运行以下命令:
importantState <- function(df) {
impst <- df[df$important, "state"]
if (length(impst) != 1) stop("group does not have one 'important'")
impst
}

stuff %>% group_by(name) %>% do(.[.$state == importantState(.), ])

dplyr 0.2我得到了我所期望的(上面的 6 行子集)。但是,如果我使用 dplyr 0.3.0.2 运行完全相同的代码它返回整个原始 df(所有 15 行)。

我查看了 github 上的 0.3 发行说明,但我没有看到任何与 do 中实质性行为的变化有关的内容。 .

有人可以通过解释这里发生的事情来帮助我至少恢复一点理智吗?或者我没有想到的创造性解决方法的任何想法?

最佳答案

也许你可以试试 filter这里?

stuff %>%
group_by(name) %>%
filter(state == state[important])

# name state important girth
# 1 Frodzak AL FALSE 148.5870
# 2 Frodzak AL TRUE 224.8380
# 3 Dumpf LA TRUE 317.4794
# 4 Ackpth NY TRUE 145.6290
# 5 Ackpth NY FALSE 267.6902
# 6 Ackpth NY FALSE 276.5504

关于r - dplyr 中 do() 函数的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27555739/

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