您可以通過factor
去轉換角色矢量數值。然後每個唯一的值得到一個唯一的整數代碼。在這個例子中,有四個值,因此數爲1〜4,按照字母順序,我想:
> d = data.frame(country=c("foo","bar","baz","qux"),x=runif(4),y=runif(4))
> d
country x y
1 foo 0.84435112 0.7022875
2 bar 0.01343424 0.5019794
3 baz 0.09815888 0.5832612
4 qux 0.18397525 0.8049514
> d$country = as.numeric(as.factor(d$country))
> d
country x y
1 3 0.84435112 0.7022875
2 1 0.01343424 0.5019794
3 2 0.09815888 0.5832612
4 4 0.18397525 0.8049514
然後,您可以運行prcomp
:
> prcomp(d)
Standard deviations:
[1] 1.308665216 0.339983614 0.009141194
Rotation:
PC1 PC2 PC3
country -0.9858920 0.132948161 -0.101694168
x -0.1331795 -0.991081523 -0.004541179
y -0.1013910 0.009066471 0.994805345
無論你的應用是這是有道理的由你決定。也許你只想放棄第一列:prcomp(d[,-1])
並使用數字數據,這似乎是其他「答案」試圖實現的內容。
請採取第二種選擇。反轉解決方案更長,需要更多時間。不是所有的東西都是一個釘子,要求用反轉錘擊打。保留那個用於更復雜的數據處理的地方,它確實給你帶來了好處。 –
正確告訴@JorisMeys,_tidyverse_對於複雜的數據更爲合適 – parth
*和*這並不回答將字符轉換爲數字的問題。 – Spacedman