【发布时间】:2015-04-04 00:15:52
【问题描述】:
我需要在一个数据框中替换多个因素的水平,因此它们将全部统一。 例如,这些因素之一的水平:
> 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 列都是因子,它们具有不同的级别名称,指代相同的含义以不同的方式表达:从示例中可以看出,其中许多在级别名称中显示相同的字母:@987654323 @...
我想通过统一获得三个级别:kokop、osa 和kes。此外,以数字1 和2 命名的级别应分别重新编码为kokop 和osa。
到目前为止,我尝试过的事情都没有成功,恐怕是因为我的思维方式比实际更复杂:我尝试过使用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'
你能告诉我你将如何解决它吗?可能比我想象的要简单得多 =/ 提前谢谢!
【问题讨论】:
-
Minimal reproducible example 和预期的输出。像
"kokopäiväinen / osa-aikainen"这样的混合级别应该怎么办? -
抱歉 Roland,刚刚粘贴了错误信息。混合级别应编码为“osa”或“kes”以防出现,如果 osa/kes 同时显示则选择“kes”。
-
@Gina Zetkin。我们的回答对您有帮助吗?