2016-04-28 86 views
-3

在本示例数据中,三个人将10个项目分为可变数量的组并为每个组提供文本标签。 人员和标签是文本字段。下载并读入R时的项目var作为整数读取。项目变量实际上是分类数据并为项目定义文本;一个测试的项目编号是一个很好的比喻。标签,物品和人员可以按任何顺序排列,我通常按照您在此处看到的方式对数据进行排序,以便进行目视检查。每个人在这个例子中有10个项目,在现实世界中通常有100个项目。每个人都有可变数量的标签。每个标签都有可变数量的项目。所有项目都与一个且只有一个标签相关联,并且所有项目(本例中为1-10个)每个人出现一次,没有缺失数据。R代码 - 重组数据,将三列数据堆积到行

人组项目

PERSON_1 label_A 1

PERSON_1 label_A 2

PERSON_1 label_A 3

PERSON_1 label_A 4

PERSON_1 label_B 5

PERSON_1 label_B 6

PERSON_1 label_C 7

PERSON_1 label_C 8

PERSON_1 label_C 9

PERSON_1 label_C 10

PERSON_2 label_D 1

PERSON_2 label_D 2

个PERSON_2 label_D 3

PERSON_2 label_D 4

...其余为简洁起见省略

线I需要重组为下面的格式的数据。每一行都是带有相关项目的标签变量,标签只在一行上。每个人都有多次重复,因为他们有独特的标签。我已经搜索了堆栈溢出并且已经进行了多次重塑和tidyr尝试,我能够生成的最好的是矩形二进制矩阵,其中数据框中有一个或零个人和标签的列,然后是10列标记为1:10的列对于此示例中的每个项目值。我可以通过后期处理获得我想要的excel,但宁可在R中完成,我需要列中的实际项目值,如下所示。理想情况下,最大ncol将为每个peson &标签以及代表排序所需的数量。 Person3,label_H需要7列的项目,所以在那些列或其他行中可能有NA或0。 任何帮助将不胜感激,我通常可以找到我需要在StackOverflow上的答案,这次我很难过。

人组项目

PERSON_1 label_A 1 2 3 4
PERSON_1 label_B 5 6
PERSON_1 label_C 7 8 9 10
PERSON_2 label_D 1 2 3 4
PERSON_2 label_E 5 6 7
person_2 label_F 8 9 10
person_3 label_G 1 2 3
person_3 label_H 4 5 6 7 8 9 10

+1

你尝试过什么? –

+1

请显示你的尝试。 – Heroka

回答

0

我不确定我是否完全理解了这个问题。最终,你正在寻找的东西是这样的:

df <- read.table(header=TRUE, text= 
"person group item 
person_1 label_A 1 
person_1 label_A 2 
person_1 label_A 3 
person_1 label_A 4 
person_1 label_B 5 
person_1 label_B 6 
person_1 label_C 7 
person_1 label_C 8 
person_1 label_C 9 
person_1 label_C 10 
person_2 label_D 1 
person_2 label_D 2 
person_2 label_D 3 
person_2 label_D 4") 
df2 <- unique(df[-3]) 
split(df$item, list(df$person, df$group), drop=TRUE) 
df2$L <- split(df$item, list(df$person, df$group), drop=TRUE) 
df2 

结果:

#> df2 
#  person group   L 
#1 person_1 label_A 1, 2, 3, 4 
#5 person_1 label_B  5, 6 
#7 person_1 label_C 7, 8, 9, 10 
#11 person_2 label_D 1, 2, 3, 4