簡體   English   中英

重命名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'

任何人都可以指導我采取正確的方法嗎?

我打算建議

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'")

一種方法是改變關卡的標簽。 首先,一些測試數據

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.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM