我想为下面的嵌套函数调用创建一个magrittr
管道链
它产生完全相同的输出。
以下内容返回包含my_names
和Freq
列的数据框。
my_names <- c('John', 'Joe', 'Jane', 'John', 'John', 'Jane')
test_df <- as.data.frame.table(sort(table(my_names), decreasing = TRUE))
my_names Freq
1 John 3
2 Jane 2
3 Joe 1
使用magrittr
管道链返回包含.
列和Freq
library(magrittr)
test_df <- my_names %>% table %>% sort(decreasing = TRUE) %>% as.data.frame.table
. Freq
1 John 3
2 Jane 2
3 Joe 1
添加%>% dplyr::rename(my_names = .)
将无效,因为.
被解释为占位符
而不是列名。
要产生与嵌套函数调用相同的输出,我需要使用额外的函数调用:test_df <- dplyr::rename(test_df, my_names = .)
有没有办法告诉%>%
将.
解释为变量名,而不是后续调用中的占位符?
答案 0 :(得分:0)
@ aosmith @在评论中提出的解决方案仅工作了几天。
dplyr
的最新开发版0.4还会生成一个包含.
列的数据框:
devtools::install_github("hadley/lazyeval")
devtools::install_github("hadley/dplyr")
library(dplyr)
my_names <- c('John', 'Joe', 'Jane', 'John', 'John', 'Jane')
my_names %>% table %>% sort(decreasing = TRUE) %>% as.data.frame.table
. Freq
1 John 3
2 Jane 2
3 Joe 1
我现在的解决方案现在看起来如下,并在之前的docendo discimus中提出:
my_names %>% table %>% sort(decreasing = TRUE) %>% as.data.frame.table %>%
setNames(c('my_names', 'Freq'))
答案 1 :(得分:0)
这是非常非常晚的,但您可以使用rename_
版本(带下划线)和字符串 "."
。这避免了非标准评估,因此可以%>%
代替.
。
test_df <- my_names %>% table %>% sort(decreasing = TRUE) %>% as.data.frame.table %>%
rename_(my_names=".")
# my_names Freq
#1 John 3
#2 Jane 2
#3 Joe 1