如果我在R中有以下矢量(我的水平显然是A,B和C)
c("A_1", "A_2", "B_1", "C_1", "C_2")
使用
之类的数字将其转换为类向量的最有效方法是什么c(1, 1, 2, 3, 3)
我觉得这应该是一个单行(可能是因素和grep的组合)但是无法提出一个。
谢谢!
答案 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