r - map_dbl 中的函数没有给出预期的结果,但如果手动运行则可以
问题描述
我真的很困惑为什么我的一个功能表现得如此奇怪。这是一些数据和函数本身:
match0 <- function(i, df) {
df <- as.data.frame(df)
j <- 1:nrow(df)
if (!is.na(df$p201[i])) {
l <- i
} else {
k <-
(!(df$Ano[i] == df$Ano[j] & df$Trimestre[i] == df$Trimestre[j] & i != j)) &
df$V2008[i] != 99 &
df$V20081[i] != 99 &
df$V20082[i] != 9999
l <- ifelse(any(k), which(k), i)
}
return(l)
}
dataset <- structure(list(UF = structure(c(11, 11), format.stata = "%8.0g"),
UPA = structure(c(110000227, 110000227), format.stata = "%12.0g"),
V1008 = structure(c(1, 1), format.stata = "%8.0g"), V1014 = structure(c(1,
1), format.stata = "%8.0g"), V2007 = structure(c(1, 1), format.stata = "%8.0g"),
V2008 = structure(c(17, 17), format.stata = "%8.0g"), V20081 = structure(c(1,
1), format.stata = "%8.0g"), V20082 = structure(c(1969, 1969
), format.stata = "%8.0g"), Ano = structure(c(2012, 2012), format.stata = "%8.0g"),
Trimestre = structure(c("1", "2"), format.stata = "%9s"),
V2003 = structure(c(1, 1), format.stata = "%8.0g")), row.names = c(NA,
-2L), class = c("tbl_df", "tbl", "data.frame"))
这是我想做的事情:
dataset %>%
group_by(UF, UPA, V1008, V1014, V2007, V2008, V20081, V20082) %>%
arrange(UF, UPA, V1008, V1014, V2007, V2008, V20081, V20082, Ano, Trimestre, V2003) %>%
group_by(index = map_dbl(
seq(n()),
~ match0(.x, df = cur_data())
), .add = TRUE)
该函数应该清楚地index = 1
为两行产生。但是,它不会运行上面的代码。但是,如果我不使用map_dbl
并逐行手动检查,我会得到想要的结果。
有人可以帮我找出原因吗?
解决方案
从?cur_data
cur_data() 给出当前组的当前数据(不包括分组变量)
因此,它传递数据而不对您在函数中检查的变量进行分组。当前的解决方法是cur_group()
通过cur_data()
.
library(dplyr)
dataset %>%
group_by(UF, UPA, V1008, V1014, V2007, V2008, V20081, V20082) %>%
arrange(UF, UPA, V1008, V1014, V2007, V2008, V20081, V20082,
Ano, Trimestre, V2003) %>%
group_by(index = purrr::map_dbl(seq(n()),
~ match0(.x, df = cbind(cur_group(), cur_data()))
), .add = TRUE)
# UF UPA V1008 V1014 V2007 V2008 V20081 V20082 V2003 Ano Trimestre p201 n_p index
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl> <dbl> <dbl>
#1 11 110000227 1 1 1 17 1 1969 1 2012 1 1 1 1
#2 11 110000227 1 1 1 17 1 1969 1 2012 2 NA 2 1
将来,会有cur_data_all()
哪些将通过分组变量传递当前数据。
推荐阅读
- c# - 使用 Rhino Mock 对 DelegateCommand 进行单元测试
- python-3.x - 使用 scikit learn 中的 tfidfvectorizer 计算 Tfidf 的正确方法
- search - 如何批量搜索和查找不同行中略有差异的数据?
- c# - 计算使用 Moq 调用递归方法的次数
- c# - 如何访问这个嵌套的 XElement?
- python - 如何使用正则表达式用基本字母替换变音符号?
- jupyter-notebook - 如何在 jupyter lab 中正确查看 markdown 文件?
- xcode - 第三方 Pod 的 LFS 带宽超过其数据配额 (SendBirdWebRTC)
- c - MADV_REMOVE 会导致 TLB 击落吗?
- ios - 私人消费 NSDictionary 属性