重命名R中的一个因子级别

时间:2015-04-29 00:58:37

标签: r r-factor

我正在尝试重命名R中数据框A中因子column1的级别df。我当前的方法是:

levels(df[!is.na(df$column1) & df$column1 == 'A',]) <- 'B'

不会抛出任何错误或警告,但完全无效。

B不是已经存在的级别(从我怀疑的试验和错误很重要),所以以下,我的第一次尝试,都不起作用

df[!is.na(df$column1) & df$column1 == 'A', 'column1'] <- 'B'

有人能引导我采用正确的方法吗?

2 个答案:

答案 0 :(得分:21)

我打算建议

levels(df$column1)[levels(df$column1)=="A"] <- "B"

或使用效用函数plyr::revalue

library("plyr")
df <- transform(df,
          column1=revalue(column1,c("A"="B")))

transform()是一点点糖,没有必要;你可以使用df$column1 <- revalue(df$column1(...))

为了完整性,car::recode也有效,尽管我发现plyr::revalue有点笨拙(因为重新编码被指定为带引号的字符串)。

car::recode(df$column1,"'A'='B'")

答案 1 :(得分:6)

一种方法就是改变关卡的标签。首先,一些测试数据

view

现在我们将“A”替换为“X”

DECLARE @sql Nvarchar(max);

SELECT @sql = CONCAT(@sql,replicate('a',4000),replicate('b', 6000)) --do it this way

--SELECT @sql = CAST(replicate('a',4000) AS NVARCHAR(MAX)) + CAST(replicate('b', 6000) AS NVARCHAR(MAX)) --or this way

我们可以看到它已经改变了

df <- data.frame(column1=c("A","B","C","A","B"))

您可能需要小心levels(df$column1) <- gsub("A","X", levels(df$column1)) ,因为它接受正则表达式。更具体的替代品将是

  column1
1       X
2       B
3       C
4       X
5       B

准确匹配“A”而非“CAB”或其他具有大写字母A的东西。