所以,我知道你们中的很多人会认为这个问题被问了很多次,但我认为没有。本质上,我希望完全平平我的数据,这意味着我希望每个人都有一个单一的记录。下面是我的数据的一个可复制的示例:
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包的cast()函数,但是它希望我聚合我不想做的数据。此外,我不想为每个业务单元单独记录,因为这只是让我回到我已经拥有的。是否有不同的方法可以避免使用for循环?
发布于 2014-04-23 17:07:49
对于reshape来说,这是一项比dcast更好的工作。只需先添加一个“时间”变量:
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 NAhttps://stackoverflow.com/questions/23250663
复制相似问题