轻松删除model.matrix()中的变量前缀

时间:2014-06-02 13:36:28

标签: r

是否有人知道一种快速简便的方法来阻止model.matrix在变量名称后附加前缀?

示例:

A <- factor(sample(0:1, 5, TRUE), labels=c("X", "Y"))
B <- factor(sample(0:2, 5, TRUE), labels=c("Red", "Green", "Blue"))
model.matrix(~ A + B)
#  (Intercept)  AY  BGreen  BBlue
#1           1   0       0      1
#2           1   1       0      1
#3           1   0       0      0
#4           1   1       1      0
#5           1   0       1      0

但是我想要更像这样的东西:

#  (Intercept)  Y  Green  Blue
#1           1  0      0     1
#2           1  1      0     1
#3           1  0      0     0
#4           1  1      1     0
#5           1  0      1     0

有没有人知道删除这些前缀的快速方法?

1 个答案:

答案 0 :(得分:1)

可以做

AB <- model.matrix(~ A + B)
colnames(AB) <- c(colnames(AB)[1], gsub("^[[:alpha:]]", "", colnames(AB)[-1]))

#   (Intercept) Y Green Blue
# 1           1 0     0    0
# 2           1 1     0    1
# 3           1 1     0    1
# 4           1 0     1    0
# 5           1 1     1    0

不确定是否以最快的方式,但它会使用gsub

删除您的姓氏中的第一个字母

修改

或者,您可以在gsub中明确指定变量名称并将其删除

AB <- model.matrix(~ A + B)
colnames(AB) <- c(colnames(AB)[1], gsub("^(A|B)", "", colnames(AB)[-1]))