让我们说在我的数据(例如虹膜)中,我想只将一个变量-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>
您可以使用split
获取数据帧列表,然后imap_dfr
,这是一个非常酷的函数,最近添加到purrr
。 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("", ""))
)
})
在映射函数中,我做了一些虚拟元素来保存标题,“END”行和两个空白行。我将你要保留的所有内容放在一个新的列中,其中包含非创造性的名称newcol
,用于保存所需输出中的(仅?)列。