首页 文章

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

提问于
浏览
1

让我们说在我的数据(例如虹膜)中,我想只将一个变量-Sepal.Length分组为Species并添加两行 - 一个在顶部(组的名称)“setosa”,然后观察后观察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

    您可以使用 split 来获取数据帧列表,然后 imap_dfr ,这是一个非常酷的函数,最近添加到 purrr . imap_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("", ""))
            )
        })
    

    在映射函数中,我做了一些虚拟元素来保存 Headers ,"END"行和两个空白行 . 我将你要保留的所有内容放在一个新的列中,并使用非创造性名称 newcol 来保存所需输出中的(仅?)列 .

相关问题