以dplyr'命名组;s分组依据,选择单个变量

以dplyr'命名组;s分组依据,选择单个变量,r,group-by,dplyr,naming,R,Group By,Dplyr,Naming,比如说,在我的数据(例如iris)中,我只想将一个变量——萼片长度按物种分组,并添加两行——一行在顶部(组名)“setosa”,然后是观察结果,在setosa的观察结果结束后,一行写着“END”,后面是两个空白行,之后是新的组名“versicolor”以“结束”行等开始观察。 我的真实数据有200多组,观察结果是字符 到目前为止,我已经用dplyr实现了这一点 iris %>% group_by(Species) %>% select(Sepal.Length) %>%

比如说,在我的数据(例如iris)中,我只想将一个变量——萼片长度按物种分组,并添加两行——一行在顶部(组名)“setosa”,然后是观察结果,在setosa的观察结果结束后,一行写着“END”,后面是两个空白行,之后是新的组名“versicolor”以“结束”行等开始观察。 我的真实数据有200多组,观察结果是字符

到目前为止,我已经用dplyr实现了这一点

iris %>%
  group_by(Species) %>%
  select(Sepal.Length) %>%
  add_row(.before=0,.after=0)
不用说,我的add_行不起作用,我也尝试过使用bind_行和mutate。任何建议将不胜感激,我希望我的输出看起来像,我将导出为txt文件

 setosa
    4.1
    5.1
    .
    .
    END
    <empty row1>
    <empty row2>
    versicolor
    5.1
    6.1
    .
    .
    END
    <empty row1>
    <empty row2>
setosa
4.1
5.1
.
.
结束
花色
5.1
6.1
.
.
结束

您可以使用
split
获取数据帧列表,然后使用
imap\u dfr
,这是最近添加到
purr
中的一个非常酷的功能
imap_dfr
映射数据帧列表,将数据帧和列表项的名称作为其参数,并一起返回一个数据帧
rbind
ed

试试这个:

iris %>%
    select(Species, Sepal.Length) %>%
    split(.$Species) %>%
    imap_dfr(function(df, heading) {
        bind_rows(
            tibble(newcol = heading),
            df %>% mutate(newcol = as.character(Sepal.Length)),
            tibble(newcol = "END"),
            tibble(newcol = c("", ""))
        )
    })
在映射函数中,我制作了一些虚拟tibble来保存标题、“结束”行和两个空行。我将所有您想要保留的内容放在一个新列中,并使用非创造性名称
newcol
,以在您想要的输出中保存(仅?)列