用因子单标签编码多个级别

时间:2012-11-14 19:51:25

标签: r

我的语言数据包含200多种语言,其中一些缺失值编码为''(0长度字符)。

我想使用factor对主要语言进行压缩,将所有其他语言作为“其他语言”进行压缩,而将''编码为'(缺失)'出现在字符串的末尾。< / p>

我的计划是:

lanfmt <- list(
  lev = c(prime <- c('English', 'Russian', 'Urdu'), diff <- setdiff(levels(lan), c(prime, '')), ''),
  lab = c(prime, diff, '')
)

table(factor(lan, lanfmt$levels, lanfmt$labels)

但R不喜欢多对一格式的因素。如何汇总到一个类别?

编辑:

我决定了一个很好的解决方案,如上所述使用lanfmt如下:

table(lanfmt$lab[match(lang, lanfmt$lev)])

它并不那么优雅,但却适用于它。

1 个答案:

答案 0 :(得分:1)

我认为您应该将您的因素转换为角色,编辑它们然后对它们进行排序。也许这样的事情有助于(lan成为列表/数据框架的语言向量):

lan <- c("English", "Russian", "Urdu", "", "Indonesian")
lan <- factor(lan)
prime <- c("English", "Russian", "Urdu", "missing")
missing <- ""

lan <- as.character(lan)
lan[lan %in% missing] <- "missing"

lan[!lan %in% prime] <- "other language"
lan <- factor(lan)
lan
[1] English        Russian        Urdu           missing       
[5] other language
Levels: English missing other language Russian Urdu

之后,您可以订购语言

order <- c("English", "Russian", "Urdu", "other language", "missing")
lan <- ordered(lan, order)
dt <- data.frame(lan, stuff=rnorm(5,4,1))
dt[with(dt, order(lan)),]

             lan    stuff
1        English 4.212460
2        Russian 3.681616
3           Urdu 3.409838
5 other language 3.304108
4        missing 3.938468