簡體   English   中英

取代多個因素的水平

[英]Replacing levels of multiple factors

我將需要在一個數據框中替換多個因素的級別,因此它們將全部統一。 例如,這些是以下因素之一中的水平:

> levels(workco[,5])
 [1] " "                              "1"                              "2"                             
 [4] "kóko"                          "kesätyö"                      "Kesätyö kokoaika"            
 [7] "koko"                           "kokop"                          "kokop."                        
[10] "Kokopäivä"                    "kokopäiväinen"                "Kokopäiväinen"               
[13] "kokopäiväinen / osa-aikainen" "kokopäivänen"                 "kokp"                          
[16] "kokp."                          "Kokp."                          "osa-aik"                       
[19] "Osa-aik / Kokopäiv."           "osa-aik."                       "Osa-aik."                      
[22] "osa-aikainen"                   "Osa-aikainen"                   "osa-aikainen/kokopäiväinen"  
[25] "Osa/kokoaikainen"               "Osap."                  

假設我有12列都是因素,並且這些列具有不同的級別名稱,這些級別名稱表示不同的相同含義:從示例中可以看出,其中許多在級別名稱中顯示相同的字母: koko, kok, kokop ...我希望通過統一獲得三個級別: kokoposakes 同樣,以數字12命名的級別也應分別重新編碼為kokoposa

到目前為止,我嘗試過的事情沒有解決,恐怕是因為我以一種比實際更復雜的方式思考:我已經嘗試使用adist()函數和grep()分別進行循環,但是我得到了發現錯誤。 例如:

code <- c("kok","osa","ma","kes",1,2," ")
list.names <- c("1", "2", "3", "4", "5", "6","7","8","9","10","11","12")
mylist <- vector("list", length(list.names))
names(mylist) <- list.names
D <- mylist
index <- mylist

for (i in ncol(workco2)){                            
  D[[i]] <- adist(workco2[,i],code,ignore.case=TRUE)
  index[[i]] <- lapply(D[[i]],which.min)
  workco2[,i] <- data.frame(code[index[[i]]])
}

而這個錯誤信息:

Error in code[index[[i]]] : invalid subscript type 'list'

您能這么暗示我如何解決嗎? 可能比我想的要簡單得多= /預先感謝!

我通常合並因子,如以下示例所示。 我將與我的標准相對應的級別子集( ... %in% c(...) )並用新級別覆蓋它們。

set.seed(357)
xy <- data.frame(name = sample(letters[1:4], size = 20, replace = TRUE), value = runif(20))
xy$name
  [1] a a b a c b d c d d c c b a c a b d c b
  Levels: a b c d
levels(xy$name)[levels(xy$name) %in% c("a", "b")] <- "a-b"
levels(xy$name)[levels(xy$name) %in% c("c", "d")] <- "c-d"
xy$name
 [1] a-b a-b a-b a-b c-d a-b c-d c-d c-d c-d c-d c-d a-b a-b c-d a-b a-b c-d c-d a-b
Levels: a-b c-d

我猜測您需要結合grep和replace。 這樣可以加快音節相似的音節(“ ko”,“ kok”)的變化速度。

資料范例

code <- as.factor(c("kok","osa","ma","kes", "koko", "osa-aikainen", "osa/kes"))

添加等級

levels(code) <- c(levels(code), "kokop")

將所有包含“ kok”的實例替換為“ kokop”

new.code <- replace(code, (grep ("kok", code)), "kokop")

將所有包含“ osa / kes”的實例替換為“ kes”

new.code <- replace(code, (grep ("osa/kes", code)), "kes")

使用較短的字符串,例如。 “ ko”,以更改類似音節的水平(“ ko”,“ kok”)

new.code <- replace(code, (grep ("ko", code)), "kokop")

暫無
暫無

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

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