2012-04-09 35 views
1

我有以下測試數據框。用於轉換數據的ddply

id1 val 
A 1 
A 1 
A 1 
A 1 
B 2 
B 2 
B 2 
B 2 

我想將它轉換爲數據框,如下所示。

id1 val 
A 1 
A 1 
A 2 
A 2 
B 3 
B 3 
B 4 
B 4 

我已經做了什麼是首先找到的次甲&乙發生次數的計數,在這種情況下= 4,拆分成2,然後,使得它得到相應遞增更新的第二列。所以四個1變成了1,2,四個2變成了3,4等等。我知道這符合SAC範例,但想知道如何用ddply來做到這一點。有什麼建議嗎?感謝很多提前

回答

1

首先,讓我們的樣本對象:

d <- data.frame(id1= c(rep("A",4), rep("B",4)), val=c(rep("1",4), rep("2",4))) 

一個方便的方式做你似乎什麼希望,簡直是要做到:

> d$val <- rep(1:(nrow(d)/2), each=2) 
> d 
    id1 val 
1 A 1 
2 A 1 
3 A 2 
4 A 2 
5 B 3 
6 B 3 
7 B 4 
8 B 4 

就是這樣。

例如,使用拆分應用組合方法的原因將是具有特別取決於列值組合的編號。隨着ddply你可以根據id1val拆分行,並獲得不同類型的編號:

f <- function(x){ rep(1:(length(x)/2), each=2) } 
ddply(d, .(id1), transform, val = f(val)) 

    id1 val 
1 A 1 
2 A 1 
3 A 2 
4 A 2 
5 B 1 
6 B 1 
7 B 2 
8 B 2 

工作的f定義和做算術肯定會帶你到一個解決方案,但如果以下假設描述你想要什麼:

  • 的+1增量每2行
  • A和B總是發生在偶數

然後我沒有看到這一點...申請rep(x, each=2)d做的工作!