您可以通过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