11

変数のセットを再コーディングする必要があるたびに、SPSS再コーディング機能を念頭に置いています。私はそれが非常に簡単であることを認めなければなりません。パッケージにも同様のrecode関数がありcar、それでうまくいきますが、で物事を成し遂げたいとしましょうfactor

data.frame値の範囲が1〜7の変数がいくつかあります。変数値を「逆」にしたいので、1を7に、2を6に、3を5に置き換えます。関数を利用できますfactor

# create dummy factor
set.seed(100)
x <- as.factor(round(runif(100,1,7)))
y <- factor(x, levels = rev(levels(x)))

そして私が実行した場合:

> levels(x)
[1] "1" "2" "3" "4" "5" "6" "7"
> levels(y)
[1] "7" "6" "5" "4" "3" "2" "1"

等しいレベルを持たないファクターを再コーディングしたいときに問題が始まります。ある因子zにレベルがある場合、関数c("1", "3", "4", "6", "7")を利用して1 = 7、2 = 6、3 = 5などのレベルを「反転」できる可能性はありますか?factor

他の効率的な再コード化関数で十分です!

4

4 に答える 4

8

factor に引数を提供する必要がありますlevels(Dirk が書いたように):

set.seed(2342472)
( x <- round(runif(10,1,7)) )
#  [1] 7 5 5 3 1 2 5 3 3 2
( xf <- as.factor(x) )
# [1] 7 5 5 3 1 2 5 3 3 2
# Levels: 1 2 3 5 7
( yf <- factor(x,levels=7:1) )
# [1] 7 5 5 3 1 2 5 3 3 2
# Levels: 7 6 5 4 3 2 1

既存の要素でもこれを行うことができます

( yxf <- factor(xf,levels=7:1) )
# [1] 7 5 5 3 1 2 5 3 3 2
#Levels: 7 6 5 4 3 2 1

ご覧のとおり、レベルは希望順に拡張されました。

于 2010-02-26T15:45:07.607 に答える
3

はい、次のように割り当てlevelsます:

R> set.seed(100)
R> x <- as.factor(round(runif(100,1,7)))
R> table(x)
x
 1  2  3  4  5  6  7 
 3 16 20 19 18 17  7 
R> levels(x) <- LETTERS[1:7]
R> table(x)
x
 A  B  C  D  E  F  G 
 3 16 20 19 18 17  7 
R> 
于 2010-02-26T15:06:32.260 に答える
2

因子レベルを完了したら、準備完了です:

df <- data.frame(x=factor(c(2,4,5,6)))
df$x <- factor(df$x, levels = 7:1)
table(df$x)

7 6 5 4 3 2 1 
0 1 1 1 0 1 0 
于 2010-02-26T15:45:09.077 に答える
1

この場合、数値があるので、剰余算術を使用して数値を変換してみませんか?

例えば

levels(x) <- as.character((6*as.numeric(levels(x)))%%7+1)

より大きな範囲を使用する場合は、6 と 7 を適切に変更します。

于 2010-02-26T16:18:08.560 に答える