1

R、私がやろうとしているのは、値を別の要素または文字列に「グループ化」して要素を作成することです。

    factor1 <- as.factor(c("A","B","C","D"))

私が欲しいのは、 &areと&areのfactor2ようなものを作成することです。私はループを試しましたが、それを機能させることはできませんが、これを行うにはエレガントな方法が必要だと信じています。ABECDFR

4

2 に答える 2

3
 library(car)
 fac2 <- recode( factor1, " c('A', 'B') = 'E';
                            c('C', 'D') = 'F' ")
 fac2

# [1] E E F F
Levels: E F

2 種類の引用符を追跡する必要があることと、「;」を使用する必要があることに注意してください。グループ化句の間。ヘルプ ページで説明する「else」引数もあります?car::recode。修正された質問の場合、recode戦略は機能しますが、これも成功します。

fac2 <- 0 + factor1 %in%  c('CA', 'OR', 'WA', 'AK')  # numeric result
fac2 <- factor(fac2) # factor result which displays like a character vector

state.abb は実質的にシステム定数ですが、因子ではなく文字ベクトルであることに注意してください。

 sts <- state.abb[sample(50)]   # a scrambled version
 sts[ sts %in% c('CA', 'OR', 'WA', 'AK')]
#[1] "CA" "AK" "OR" "WA"

car::recode を使用する場合、このコードは成功します (recode因子が入力として与えられた場合に因子を返すことに注意してください。私はそうしませんでした):

 recode(sts, " c('CA', 'OR', 'WA', 'AK') = 1; else=0")
#-------
 [1] 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
[45] 0 0 0 0 0 0
于 2013-02-12T21:02:31.713 に答える
1

これはあなたが期待していることですか?

factor2 <- factor1
levels(factor2) <- rep(c("E","F"), each=2)

# [1] E E F F
# Levels: E F

@DWinの例を使用して、次のようにします。

set.seed(2)
sts <- state.abb[sample(50)]
# your factor1 would be
factor1 <- factor(sts)
# you would construct factor2 as 
factor2 <- factor(0 + factor1 %in% c('CA', 'OR', 'WA', 'AK'))
于 2013-02-12T20:47:51.590 に答える