我有一个数据框,其中一列将重复相同的字符串许多行(它有所不同)。我想将基于每个重复名称的数据框拆分为单独的数据框(输出可以是列表)。例如对于此数据框:
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个元素的“列表”(基于@BondedDust显示的示例),则一个选项是
indx <- inverse.rle(within.list(rle(as.character(dat$names)),
values <- seq_along(values)))
split(dat, indx)
或使用的开发版本data.table
,我们可以rleid
用来创建分组变量
library(data.table)#v1.9.5+
setDT(dat)[, grp:= rleid(names)]
然后通过将“ grp”指定为分组变量,对不同的组使用标准的data.table操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句