从R中的名称获取类向量的最快方法

时间:2010-12-11 02:56:00

标签: r

如果我在R中有以下矢量(我的水平显然是A,B和C)

c("A_1", "A_2", "B_1", "C_1", "C_2")

使用

之类的数字将其转换为类向量的最有效方法是什么
c(1, 1, 2, 3, 3)

我觉得这应该是一个单行(可能是因素和grep的组合)但是无法提出一个。

谢谢!

2 个答案:

答案 0 :(得分:5)

一个简单的解决方案是:

x <- c("A_1", "A_2", "B_1", "C_1", "C_2")


x.out <- as.numeric(factor(substr(x, 0,1)))

如果您的数据更加多样化,请告诉我们,我们可以努力使其成为更强大的解决方案。

答案 1 :(得分:2)

有一种(更一般的)正则表达式方法,不需要指定前导字符串的宽度:

删除任何包含下划线的内容:

> as.numeric(factor(sub("_.+", "" , x)))
[1] 1 1 2 3 3

或者选择下划线之前的字符(因为在parens中包含的模式的R regex部分可以在替换字符串中通过“\\”后跟数字引用):

> as.numeric(factor(sub("(^.+)_.+$", "\\1" , x)))
[1] 1 1 2 3 3