-1

200 を超える言語を含む言語データがあり、いくつかの欠損値が '' (長さ 0 文字) としてコード化されています。

これを圧縮してfactor主な言語をコーディングし、他のすべての言語を「他の言語」として圧縮したいと思いますが、「」は文字列の最後に表示される「(missing)」としてコーディングされます。

私の計画はこれです:

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 は因子の多対 1 形式を好みません。1 つのカテゴリに集約するにはどうすればよいですか?

編集:

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 に答える