【发布时间】:2018-07-07 16:24:21
【问题描述】:
我经常希望在特定索引处添加一个新列; mutate() 没有一个简单的实现,而 add_column() 通过 .before 和 .after 参数实现。我希望这两个函数在简单的设置中表现相同,但事实并非如此。下面是将行索引转换为新变量的 MWE。 R 文档没有说清楚:为什么这两个函数的基本语法不同?
dat <- as.tibble(matrix(rnorm(1e4), nrow=100))
dat1 <- dat %>% mutate(id=row_number()) # works as expected
dat2 <- dat %>% add_column(id=row_number()) # throws error
dat3 <- dat %>% add_column(id=1:nrow(dat), .before=1) # works, but harder to read
【问题讨论】:
-
在
?row_number的示例中,它表示row_number can be used with single table verbs without specifying x (for data frames and databases that support windowing)。add_row不是 dplyr 动词,因此需要row_number的参数(但要小心;它返回排名)。更简单:rowid_to_column -
rowid_to_column的重要提示——绝对有助于发布的用例;尽管我仍然对这两个 tidyverse 函数之间看似脱节的更广泛问题感到好奇。