通过重复字符串来分割数据帧

时间:2015-05-22 16:02:03

标签: r split dataframe

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

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

我应该提到有数千种不同的重复名称。

1 个答案:

答案 0 :(得分:1)

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

 split(dat, dat$names)

如果您想要分割“狗”,“猫”,“狗”等。作为一个'列表'有3个元素(基于@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)]

然后通过指定&#39; grp&#39;来为不同的组使用标准的data.table操作。作为分组变量。