2012-11-20 25 views
2

我想展開下面的數據幀重現字符模式爲數字模式

d <- data.frame(a = c(rep("A",5),rep("B",5),rep("C",3),rep("D",2))) 

> d 
    a 
1 A 
2 A 
3 A 
4 A 
5 A 
6 B 
7 B 
8 B 
9 B 
10 B 
11 C 
12 C 
13 C 
14 D 
15 D 

,這樣有一個b看上去就像一列:

> d 
    a b 
1 A 1 
2 A 1 
3 A 1 
4 A 1 
5 A 1 
6 B 2 
7 B 2 
8 B 2 
9 B 2 
10 B 2 
11 C 3 
12 C 3 
13 C 3 
14 D 4 
15 D 4 

不能確定如何實現這一點。

回答

3

使用匹配:

match(d$a, unique(d$a)) 
+0

也適用。大! :) – user969113

+0

聰明。我也更喜歡這個。 –

+0

@ JoshO'Brien它基本上就是你的解決方案在封面下做的 – hadley

2
d$b <- as.integer(factor(d$a, levels=unique(d$a))) 
+0

+1下次提醒我先發布代碼,然後編輯並添加效果! PS。你可以把這個簡化爲'as.integer(factor(d $ a))' – Andrie

+0

hello,它可以工作,但只能部分工作。例如,如果一個人圍繞B和D進行交換,那麼D仍然會得到數字4,但應該得到兩個。我的例子可能不是很好,因爲字母A到D是按字母順序排列的。對不起 – user969113

+0

@ user969113看我的編輯,它應該與任何字母順序一起工作。 –