通过重复字符串拆分数据帧

splitting data frame by repeating strings

我有一个数据框,其中一列将在多行中重复相同的字符串(它会有所不同)。我想根据每个重复名称将数据框拆分为单独的数据框(输出可以是列表)。例如对于这个数据框:

dat = data.frame(names=c('dog','dog','dog','dog','cat','cat'), value=c(1,2,3,4,5,5)) 

输出应该是

   names value
   dog     1
   dog     2
   dog     3
   dog     4

   names value
   cat     5
   cat     5

我应该提到有成千上万个不同的重复名称。

您可以使用 split 函数,它将在 list 中给出输出。我认为将数据集放在 list 中会更容易,因为大多数操作都可以在列表本身中执行

 split(dat, dat$names)

如果您想将 'dog'、'cat'、'dog' 拆分为具有 3 个元素的 'list'(基于@BondedDust 显示的示例) , 一个选项是

 indx <- inverse.rle(within.list(rle(as.character(dat$names)), 
                values <- seq_along(values)))
 split(dat, indx)

或者使用data.table的devel版本,我们可以使用rleid创建分组变量

 library(data.table)#v1.9.5+
 setDT(dat)[, grp:= rleid(names)]

然后通过将 'grp' 指定为分组变量,对不同的组使用标准 data.table 操作。