1

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

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

4

2 回答 2

0

@aosmith@ 在评论中建议的解决方案只工作了几天。

最新的开发版本 0.4dplyr还生成带有.列的数据框:

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'))
于 2015-01-06T14:09:05.663 回答
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
于 2015-07-20T01:32:58.493 回答