重命名 R 中一个因子的一个级别
Rename one level of a factor in R
我正在尝试重命名 R 中数据框 df
中因子 column1
的级别 A
。我目前的做法是:
levels(df[!is.na(df$column1) & df$column1 == 'A',]) <- 'B'
它不会抛出任何错误或警告,但完全无效。
B
不是一个已经存在的级别(从反复试验中我开始怀疑它很重要),所以下面的,我的第一次尝试,也没有奏效
df[!is.na(df$column1) & df$column1 == 'A', 'column1'] <- 'B'
谁能指导我正确的方法?
一种方法就是更改关卡的标签。一、一些测试数据
df <- data.frame(column1=c("A","B","C","A","B"))
现在我们将 "A" 替换为 "X"
levels(df$column1) <- gsub("A","X", levels(df$column1))
我们可以看到它已经改变了
column1
1 X
2 B
3 C
4 X
5 B
您可能需要小心使用 gsub()
,因为它接受正则表达式。更具体的替换是
gsub("^A$","X", levels(df$column1))
完全匹配 "A" 而不是 "CAB" 或其他大写字母 A.
我正要建议
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'")
我正在尝试重命名 R 中数据框 df
中因子 column1
的级别 A
。我目前的做法是:
levels(df[!is.na(df$column1) & df$column1 == 'A',]) <- 'B'
它不会抛出任何错误或警告,但完全无效。
B
不是一个已经存在的级别(从反复试验中我开始怀疑它很重要),所以下面的,我的第一次尝试,也没有奏效
df[!is.na(df$column1) & df$column1 == 'A', 'column1'] <- 'B'
谁能指导我正确的方法?
一种方法就是更改关卡的标签。一、一些测试数据
df <- data.frame(column1=c("A","B","C","A","B"))
现在我们将 "A" 替换为 "X"
levels(df$column1) <- gsub("A","X", levels(df$column1))
我们可以看到它已经改变了
column1
1 X
2 B
3 C
4 X
5 B
您可能需要小心使用 gsub()
,因为它接受正则表达式。更具体的替换是
gsub("^A$","X", levels(df$column1))
完全匹配 "A" 而不是 "CAB" 或其他大写字母 A.
我正要建议
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'")