我正在尝试重命名R 中数据框中A的因子级别.我目前的方法是这样的:column1df
levels(df[!is.na(df$column1) & df$column1 == 'A',]) <- 'B'
Run Code Online (Sandbox Code Playgroud)
它不会引发任何错误或警告但完全无效.
B 是不是已经存在的水平(从我怀疑的试验和错误是重要的),所以以下,我的第一次尝试,也没有工作
df[!is.na(df$column1) & df$column1 == 'A', 'column1'] <- 'B'
Run Code Online (Sandbox Code Playgroud)
任何人都可以指导我采取正确的方法吗?
Ben*_*ker 21
我打算建议
levels(df$column1)[levels(df$column1)=="A"] <- "B"
Run Code Online (Sandbox Code Playgroud)
或使用效用函数plyr::revalue:
library("plyr")
df <- transform(df,
column1=revalue(column1,c("A"="B")))
Run Code Online (Sandbox Code Playgroud)
transform()是一点点糖,没有必要; 你可以用df$column1 <- revalue(df$column1(...))
为了完整性,car::recode也可以工作,虽然我发现它有点笨拙plyr::revalue(因为重新编码被指定为带引号的字符串).
car::recode(df$column1,"'A'='B'")
Run Code Online (Sandbox Code Playgroud)
一种方法是改变关卡的标签.首先,一些测试数据
df <- data.frame(column1=c("A","B","C","A","B"))
Run Code Online (Sandbox Code Playgroud)
现在我们将"A"替换为"X"
levels(df$column1) <- gsub("A","X", levels(df$column1))
Run Code Online (Sandbox Code Playgroud)
我们可以看到它已经改变了
column1
1 X
2 B
3 C
4 X
5 B
Run Code Online (Sandbox Code Playgroud)
您可能需要小心,gsub()因为它接受正则表达式.更具体的替代品将是
gsub("^A$","X", levels(df$column1))
Run Code Online (Sandbox Code Playgroud)
完全匹配"A"而不是"CAB"或其他与大写字母A.