我有一长串对象,我需要划分成较小的列表,每列有20个条目。问题在于每个对象只能在一个列表中出现一次。将长列表划分为R中的较短列表
# Create some example data...
# Make a list of objects.
LIST <- c('Oranges', 'Toast', 'Truck', 'Dog', 'Hippo', 'Bottle', 'Hope', 'Mint', 'Red', 'Trees', 'Watch', 'Cup', 'Pencil', 'Lunch', 'Paper', 'Peanuts', 'Cloud', 'Forever', 'Ocean', 'Train', 'Fork', 'Moon', 'Horse', 'Parrot', 'Leaves', 'Book', 'Cheese', 'Tin', 'Bag', 'Socks', 'Lemons', 'Blue', 'Plane', 'Hammock', 'Roof', 'Wind', 'Green', 'Chocolate', 'Car', 'Distance')
# Generate a longer list, with a random sequence and number of repetitions for each entry
LONG.LIST <- data.frame(Name = (sample(LIST, size = 200, replace = TRUE)))
print(LONG.LIST)
Name
1 Cup
2 Distance
3 Roof
4 Pencil
5 Lunch
6 Toast
7 Watch
8 Bottle
9 Car
10 Roof
11 Lunch
12 Forever
13 Cheese
14 Oranges
15 Ocean
16 Chocolate
17 Socks
18 Leaves
19 Oranges
20 Distance
21 Green
22 Paper
23 Red
24 Paper
25 Trees
26 Chocolate
27 Bottle
28 Dog
29 Wind
30 Parrot
etc....
使用上述生成的例子,'Distance'
出现在两个位置“2”和位置“20”,'Lunch'
在两个“5”和'11,以及在'Oranges'
“14”和19' ,所以第一没有重复的列表需要扩展到包括'Green'
,'Paper'
和'Red'
。然后第二个列表将与'Paper'
开始在24位
最后名单很可能是不完整的,所以这将是很好的与“NA的垫它
如果输出分别列这将是最简单的一个数据框。
我不知道从哪里开始,所以任何建议都非常感谢。谢谢!
你意思是这个'library(tidyverse); LONG.LIST%>%group_by(Name)%>%mutate(grp = row_number())%>%group_by(grp)%> mutate(ind = row_number())%>%传播(grp,名称)' – akrun
@akrun - 太好了,谢谢!似乎运作良好。如果你想把它写成答案,我会接受它。我对tidyverse不熟悉,您能否详细介绍一下发生了什么?我想改变的唯一方法是按字母顺序排列每个列表。 – EcologyTom
@EcologyTom你的意思是说每个列表应该从LONG.LIST的(24n + 1)索引开始? –