在dplyr的group_by之后命名该组,选择一个变量

时间:2018-02-20 16:54:19

标签: r group-by dplyr naming

让我们在我的数据(例如虹膜)中说,我想只将一个变量-Sepal.Length分组,然后添加两行 - 一个在顶部(组的名称)" setosa& #34;,然后观察结果然后在setosa的观察结束后,一行说" END",然后是两个空白行,之后是新的组名" versicolor"从" END"开始观察排等 我的真实数据有200多个组,观察是字符。

到目前为止,我已经用dplyr实现了这个目标

iris %>%
  group_by(Species) %>%
  select(Sepal.Length) %>%
  add_row(.before=0,.after=0)

毋庸置疑,我的add_row不起作用,我也尝试过使用bind_rows和mutate。任何建议都会非常感激,我希望我的输出看起来像,我将导出为txt文件。

 setosa
    4.1
    5.1
    .
    .
    END
    <empty row1>
    <empty row2>
    versicolor
    5.1
    6.1
    .
    .
    END
    <empty row1>
    <empty row2>

1 个答案:

答案 0 :(得分:0)

您可以使用split来获取数据框列表,然后imap_dfr,这是一个非常酷的函数,最近添加到purrrimap_dfr映射数据框列表,将数据框和列表条目的名称作为参数,并返回一个rbind个数据帧。

试试这个:

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("", ""))
        )
    })

在映射函数中,我做了一些虚拟元素来保存标题,“END”行和两个空白行。我将您想要保留的所有内容放在一个名为newcol的新列中,以保留所需输出中的(仅?)列。