2014-04-23 139 views
3

因此,我知道很多人會認爲這個問題已經被問了很多次,但我認爲它沒有。從本質上講,我期望將我的數據完全展平,這意味着我需要每個人的單一記錄。這裏是我的數據的可重複的例子:將多個記錄轉換爲R中的單個記錄

id  BusinessUnit var1 var2 var3 
1 1 Risk & Compliance 8 7 7 
2 1  Investments 7 8 7 
3 1  Credit Cards 8 9 7 
4 2  Investments 9 10 8 
5 2  Credit Cards 9 10 8 
6 3 Risk & Compliance 9 10 9 
7 3  Credit Cards 10 9 10 
8 3  Call Center 6 9 10 
9 4  Investments 7 6 10 
10 4  Call Centers 7 5 9 
11 5 Risk & Compliance 10 7 9 
12 6 Risk & Compliance 6 8 9 
13 6  Credit Cards 5 10 6 

我想直到結束是這樣的:

id  BusinessUnit1 var1_1 var2_1 var3_1 BusinessUnit2 var1_2 var2_2 var3_2 
1 1 Risk & Compliance  8  7  7 Investments  7  8  7 
2 2  Investments  9  10  8 Credit Cards  9  10  8 
    BusinessUnit3 var1_3 var2_3 var3_3 
1 Credit Cards  8  9  7 
2   <NA>  NA  NA  NA 

我已經使用reshape2包的演員()函數嘗試,但它希望我彙總我不想做的數據。另外,我不想爲每個業務部門單獨記錄,因爲這會讓我回到我已有的狀態。有沒有不同的方法來避免使用for循環?

+0

不同業務單位的最大可能數量是多少?我們可以假設總是3,或者我們需要從數據中推斷出它? – digEmAll

+0

好問題;最大的業務單位數量是3,但正如您在上面看到的,並非每個人都有三個業務單位。 – brittenb

回答

6

這對於reshapedcast更好。只需首先添加一個「時間」變量:

mydf$time <- ave(rep(1, nrow(mydf)), mydf$id, FUN = seq_along) 
reshape(mydf, idvar="id", direction = "wide") 
# id BusinessUnit.1 var1.1 var2.1 var3.1 BusinessUnit.2 var1.2 var2.2 var3.2 
# 1 1 Risk & Compliance  8  7  7 Investments  7  8  7 
# 4 2  Investments  9  10  8 Credit Cards  9  10  8 
# 6 3 Risk & Compliance  9  10  9 Credit Cards  10  9  10 
# 9 4  Investments  7  6  10 Call Centers  7  5  9 
# 11 5 Risk & Compliance  10  7  9   <NA>  NA  NA  NA 
# 12 6 Risk & Compliance  6  8  9 Credit Cards  5  10  6 
# BusinessUnit.3 var1.3 var2.3 var3.3 
# 1 Credit Cards  8  9  7 
# 4   <NA>  NA  NA  NA 
# 6  Call Center  6  9  10 
# 9   <NA>  NA  NA  NA 
# 11   <NA>  NA  NA  NA 
# 12   <NA>  NA  NA  NA 
+0

絕對驚人。謝謝! – brittenb