2

重複の可能性:
R の 2 つの列の因子レベルの結合

私は R にかなり慣れていないので、再コーディング スクリプトをより効果的で「正しい」ものにしようとしています。フォーラムを検索してみましたが、どこにも行き着きませんでした。おそらく、間違った用語を使用して見逃している可能性があります。質問が既に投稿されている場合は、ご容赦ください。

1 つの因子変数にまとめたい 2 つの因子変数があります。これらは同じ調査に由来し、どちらも教育レベルを測定します。そもそも私が 2 つの変数を持っている理由は、不運な調査構造のためですが、それは重要ではありません。重要な点は、それらは相互に排他的であるということです (1 つしか存在できません)。

私のデータは次のようになります。

education       education2
9th grade       <NA>
9th grade       <NA>
<NA>            9th grade
<NA>            10th grade
10th grade      <NA>
11th grade      <NA>
<NA>            9th grade
<NA>            11th grade
<NA>            <NA>

私のスクリプトは次のようになります。

highest.edu     <- vector(length=length(df$education))
a.grade       <- which(df$education=="9th grade")
a.grade2      <- which(df$education2=="9th grade")
b.grade      <- which(df$education=="10th grade")
b.grade2     <- which(df$education2=="10th grade")
c.grade      <- which(df$education=="11th grade")
c.grade2     <- which(df$education=="11th grade")

highest.edu[a.grade]      <- as.character(df$education)[a.grade]
highest.edu[a.grade2]     <- as.character(df$education2)[a.grade2]
highest.edu[b.grade]     <- as.character(df$education)[b.grade]
highest.edu[b.grade2]    <- as.character(df$education2)[b.grade2]
highest.edu[c.grade]     <- as.character(df$education)[c.grade]
highest.edu[c.grade2]    <- as.character(df$education2)[c.grade2]

highest.edu  <- factor(highest.edu)
highest.edu[highest.edu =="FALSE"] =NA
highest.edu  <- factor(highest.edu)

もちろん、これは悪いことではありませんが、15 レベルの因子変数が 2 回以上ある場合は、より迅速な代替手段を探し始めます。

私はこのようなことを試しましたが、運がありません:

a.grade   <- which(df$education=="9th grade" | df$education2=="9th grade")
b.grade  <- which(df$education=="10th grade" | df$education=="10th grade")
c.grade  <- which(df$education=="11th grade" | df$education2=="11th grade")

highest.edu[a.grade]      <- as.character(df$education)  
[a.grade]|as.character(df$education2)[a.grade]
highest.edu[b.grade]      <- as.character(df$education)          
[b.grade]|as.character(df$education2)[b.grade]

私にこれを与える: as.character(df$education)[9th grade] のエラー | as.character(df$education2)[9th grade]: 数値型、論理型、または複合型に対してのみ操作が可能です

これを克服する方法はありますか?

事前にご提案いただきありがとうございます

編集:

私が目指している結果はこれです:

highest.education
9th grade
9th grade
9th grade
10th grade
10th grade
11th grade
9th grade
11th grade
<NA>

投稿: 「R の 2 つの列の結合因子レベル」は別の結果をもたらすようです

再びありがとう

4

3 に答える 3

1

それらが文字列になったら、それは簡単です

# make them character types
ed <- levels(df$education)[df$education]
ed2 <- levels(df$education2)[df$education2]
# make one new factor that integrates them
ed[is.na(ed)] <- ed2[is.na(ed)]
# make it a factor again
ed <- factor(ed)

特に で列タイプをすでに設定している場合は、最初に文字として読み込むことでプロセスを高速化できますread.table

于 2012-11-22T01:01:40.147 に答える
1

すべての因子水準が結果に含まれていることを確認する必要があります。

levels(education) <- c(levels(education), levels(education2))
education[is.na(education)] <- education2[is.na(education)]
于 2012-11-22T00:54:46.283 に答える
0

Basically you need to make sure the levels are both the "union" or "intersection" of the unique levels and in the same order, then you can join them using c. Search on: [r] factor union levels.

于 2012-11-21T23:58:12.240 に答える