でR
、私がやろうとしているのは、値を別の要素または文字列に「グループ化」して要素を作成することです。
factor1 <- as.factor(c("A","B","C","D"))
私が欲しいのは、 &areと&areのfactor2
ようなものを作成することです。私はループを試しましたが、それを機能させることはできませんが、これを行うにはエレガントな方法が必要だと信じています。A
B
E
C
D
F
R
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
これはあなたが期待していることですか?
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'))