-1

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

我想压缩它factor来编码主要语言,而所有其他语言都被编码为“其他语言”,而“”被编码为“(缺失)”,出现在字符串的末尾。

我的计划是这样的:

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)])

它不是那么优雅,但它在紧要关头工作。

4

1 回答 1

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
于 2012-11-14T20:23:35.320 回答