我的语言数据包含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)])
它并不那么优雅,但却适用于它。
答案 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