r语言 - 如何使用 magrittr 的前向管道运算符将"."解释为变量而不是占位符



我想为下面的嵌套函数调用创建一个magrittr管链产生完全相同的输出。

下面返回一个数据框,其中包含列 my_namesFreq 列。

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 = .)

有没有办法告诉%>%在后续调用中将.解释为变量名而不是占位符?

这是

非常非常晚的,但是您可以使用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
@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'))

相关内容

  • 没有找到相关文章

最新更新