我有一个数据框,其中一列将为多行重复相同的字符串(它会有所不同)。我想基于每个重复名称将数据帧拆分成单独的数据帧(输出可以是列表)。例如,对于此数据框:
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
我应该提到有数千种不同的重复名称。
答案 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操作。作为分组变量。