如何解决函数dplyr中过滤器的异常行为
我有一个函数,该函数根据传递给该函数的组列的唯一值来过滤%vid1%
set asd=1
set vid1=qwe
echo %vid%asd%%
当我与此df一起使用时,
data.frame
la <- function(df,grp){
gr <- df %>% pull({{grp}}) %>% unique()
purrr::map(gr,function(x){
print(x)
filter(df,{{grp}} == x)
})
}
我得到了正确的印刷品和子集。 但是,当我将其与另一个df(应等效)一起使用时,它无法按预期工作。
x <- structure(list(mac = c("dc:a6:32:21:59:2b","dc:a6:32:2d:8c:ca","dc:a6:32:2d:b8:62","dc:a6:32:2d:ca:3f"),datetime = structure(c(1594644546,1594645457,1594645375,1594645080),tzone = "UTC",class = c("POSIXct","POSIXt")),Comment = c("FED2","FED7","FED1","FED6")),class = c("tbl_df","tbl","data.frame"),row.names = c(NA,-4L))
我在每种类型的组上得到0行(我的实际示例与la(x,mac)
数据帧的组具有相同的组)。
有趣的是,这按预期工作。
df <- structure(list(datetime = structure(c(1594644600,1594644900,1594645200,1594645500,1594645800,1594646100),"POSIXt"),tzone = "UTC"),movement = c(9940.50454596681,10779.7747307276,7148.52826988968,7687.54314683339,8797.06954533588,7524.02474093548
),x = c(606,NA,240,504,NA),y = c(386,274,56,i_x = c(606,228,214,407.5,500,292.947368421053),i_y = c(386,286,258,49.1666666666667,234),mac = c("dc:a6:32:21:59:2b","dc:a6:32:21:59:2b","dc:a6:32:21:59:2b")),spec = structure(list(
cols = list(filename = structure(list(),class = c("collector_character","collector")),datetime = structure(list(format = ""),class = c("collector_datetime",movement = structure(list(),class = c("collector_double",x = structure(list(),y = structure(list(),i_x = structure(list(),i_y = structure(list(),"collector"))),default = structure(list(),class = c("collector_guess",delim = "\t"),class = "col_spec"),-6L),"data.frame"))
这是怎么回事?
解决方法
正如评论所暗示的那样,问题在于我在function(x)
调用中包含map
,并且由于df
有一个x
列,所以事情变得很奇怪。我为此选择了另一个变量名,现在可以使用了。
la <- function(df,grp){
gr <- df %>% pull({{grp}}) %>% unique()
purrr::map(gr,function(tt){
print(tt)
filter(df,{{grp}} == tt)
})
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。