group_by 和 group_by_ 在管道中
group_by and group_by_ in pipes
我正在编写一个可以使用 dplyr 包对变量进行分组和连接的函数:
basket<-function(dataframe, group, target)
{
dataframe %>%
group_by_(group) %>%
summarise(new_target=paste(as.character(target), collapse="_"))
}
我正在使用 mtcars 数据集进行测试:
basket(mtcars, mtcars$am, mtcars$wt)
所需的输出应该是这样的:
am wt
0 2.62_2.875_2.32...
1 3.215_3.19_3.44...
但是,在我的代码中,group_by_ 函数无法成功创建基于 "am" 的组。我得到的结果只是 "wt":
所有值的串联字符串
[1] "2.62_2.875_2.32_3.215_3.44_3.46_3.57_3.19_3.15_3.44_3.44_4.07_3.73_3.78...
如果我使用 group_by 那么我会收到这个错误:
stop(structure(list(message = "unknown variable to group by : group",
call = resolve_vars(new_groups, tbl_vars(.data)), cppstack = structure(list(
file = "", line = -1L, stack = "C++ stack not available on this system"), .Names = c("file",
"line", "stack"), class = "Rcpp_stack_trace")), .Names = c("message", ...
有人以前遇到过这个问题吗?
您需要 group_by
和 summarise
的 SE 版本,并提供引用的值 (""
)。在手头 data.frame 中引用变量时,不要将美元符号与 dplyr
一起使用。
basket<-function(dataframe, group, target) {
dataframe %>%
group_by_(group) %>%
summarise_(new_target = lazyeval::interp(~paste(as.character(x), collapse="_"),
x = as.name(target)))
}
basket(mtcars, "am", "wt")
# A tibble: 2 × 2
am new_target
<dbl> <chr>
1 0 3.215_3.44_3.46_3.57_3.19_3.15_3.44_3.44_4.07_3.73_3.78_5.25_5.424_5.345_2.465_3.52_3.435_3.84_3.845
2 1 2.62_2.875_2.32_2.2_1.615_1.835_1.935_2.14_1.513_3.17_2.77_3.57_2.78
另见 vignette('nse')
。
我正在编写一个可以使用 dplyr 包对变量进行分组和连接的函数:
basket<-function(dataframe, group, target)
{
dataframe %>%
group_by_(group) %>%
summarise(new_target=paste(as.character(target), collapse="_"))
}
我正在使用 mtcars 数据集进行测试:
basket(mtcars, mtcars$am, mtcars$wt)
所需的输出应该是这样的:
am wt
0 2.62_2.875_2.32...
1 3.215_3.19_3.44...
但是,在我的代码中,group_by_ 函数无法成功创建基于 "am" 的组。我得到的结果只是 "wt":
所有值的串联字符串[1] "2.62_2.875_2.32_3.215_3.44_3.46_3.57_3.19_3.15_3.44_3.44_4.07_3.73_3.78...
如果我使用 group_by 那么我会收到这个错误:
stop(structure(list(message = "unknown variable to group by : group",
call = resolve_vars(new_groups, tbl_vars(.data)), cppstack = structure(list(
file = "", line = -1L, stack = "C++ stack not available on this system"), .Names = c("file",
"line", "stack"), class = "Rcpp_stack_trace")), .Names = c("message", ...
有人以前遇到过这个问题吗?
您需要 group_by
和 summarise
的 SE 版本,并提供引用的值 (""
)。在手头 data.frame 中引用变量时,不要将美元符号与 dplyr
一起使用。
basket<-function(dataframe, group, target) {
dataframe %>%
group_by_(group) %>%
summarise_(new_target = lazyeval::interp(~paste(as.character(x), collapse="_"),
x = as.name(target)))
}
basket(mtcars, "am", "wt")
# A tibble: 2 × 2 am new_target <dbl> <chr> 1 0 3.215_3.44_3.46_3.57_3.19_3.15_3.44_3.44_4.07_3.73_3.78_5.25_5.424_5.345_2.465_3.52_3.435_3.84_3.845 2 1 2.62_2.875_2.32_2.2_1.615_1.835_1.935_2.14_1.513_3.17_2.77_3.57_2.78
另见 vignette('nse')
。