2016-04-28 92 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