2014-01-21 89 views
-1

數據幀我有一個看起來像重塑中的R

F1  F2  Number 
Banana Apple  9 
Orange Banana 7 
Apple Orange 8 
Banana Orange 6 

我需要將其轉換爲

Type F1 F2 
Banana 15 7 
Orange 7 14 
Apple 8 9 
+0

這些數字沒有加起來...... – PascalVKooten

回答

4

這裏一個數據幀是一個辦法:

setNames(merge(aggregate(Number ~ F1, dat, sum), 
       aggregate(Number ~ F2, dat, sum), 
       by.x = "F1", by.y = "F2", all = TRUE), 
     c("Type", "F1", "F2")) 

#  Type F1 F2 
# 1 Apple 8 9 
# 2 Banana 15 7 
# 3 Orange 7 14 

其中dat是你的數據框的名字。

+0

如果我有不同數量的行怎麼辦?在F1中,有三種和In F2,四種。 – BigDataScientist

+0

@ user2684128查看更新。現在,即使行數不同,它也可以工作。 –

+0

太棒了!非常感謝 – BigDataScientist

1

此問題,也可以很容易地與 「reshape2」 包解決:

library(reshape2) 

x <- melt(mydf, id.vars="Number") 
dcast(x, value ~ variable, value.var="Number", fun.aggregate=sum) 
# value F1 F2 
# 1 Apple 8 9 
# 2 Banana 15 7 
# 3 Orange 7 14 

然而,它也與基礎R很容易地解決:

xtabs(Number ~ values + ind, 
     cbind(mydf["Number"], 
      stack(mydf[setdiff(names(mydf), "Number")]))) 
#   ind 
# values F1 F2 
# Apple 8 9 
# Banana 15 7 
# Orange 7 14 

在箱子你的數據已經很長了,因爲他們在your comment,它更直接:

xtabs(Number ~ Date + Type, mydf) 
#   Type 
# Date  M1 M2 
# 01/01/14 9 7 
# 01/02/14 8 6