別の列の4つの値に基づいて新しい列を作成したいとします。別の列の4つの値に基づいて新しい列を作成する
if col1=1 then col2= G;
if col1=2 then col2=H;
if col1=3 then col2=J;
if col1=4 then col2=K.
これはどのようにしてRで行いますか? 私はこれに対処するために誰かが必要です。私はif/elseとifelseを試しましたが、誰も動作していないようです。ありがとう
別の列の4つの値に基づいて新しい列を作成したいとします。別の列の4つの値に基づいて新しい列を作成する
if col1=1 then col2= G;
if col1=2 then col2=H;
if col1=3 then col2=J;
if col1=4 then col2=K.
これはどのようにしてRで行いますか? 私はこれに対処するために誰かが必要です。私はif/elseとifelseを試しましたが、誰も動作していないようです。ありがとう
インデックスが整数1:4の値を検索する特別なケースがあります。つまり、ベクトル索引を使用して問題を簡単に解決できます。
まず、いくつかのサンプルデータを作成する:
set.seed(1)
dat <- data.frame(col1 = sample(1:4, 10, replace = TRUE))
次に、ルックアップ値を定義し、所望の結果を見つけるために[
サブセットを使用する:
values <- c("G", "H", "J", "K")
dat$col2 <- values[dat$col1]
結果:
dat
col1 col2
1 2 H
2 2 H
3 3 J
4 4 K
5 1 G
6 4 K
7 4 K
8 3 J
9 3 J
10 1 G
を
より一般的に、あなたはこの種の問題を解決するためにmatch
と組み合わせ[
サブセットを使用することができます:あなたは、ネストされたifelse
を使用することができ
index <- c(1, 2, 3, 4)
values <- c("G", "H", "J", "K")
dat$col2 <- values[match(dat$col1, index)]
dat
col1 col2
1 2 H
2 2 H
3 3 J
4 4 K
5 1 G
6 4 K
7 4 K
8 3 J
9 3 J
10 1 G
これを行うにはいくつかの方法がありますが、ここには1つあります。
set.seed(357)
mydf <- data.frame(col1 = sample(1:4, 10, replace = TRUE))
mydf$col2 <- rep(NA, nrow(mydf))
mydf[mydf$col1 == 1, ][, "col2"] <- "A"
mydf[mydf$col1 == 2, ][, "col2"] <- "B"
mydf[mydf$col1 == 3, ][, "col2"] <- "C"
mydf[mydf$col1 == 4, ][, "col2"] <- "D"
col1 col2
1 1 A
2 1 A
3 2 B
4 1 A
5 3 C
6 2 B
7 4 D
8 3 C
9 4 D
10 4 D
はここcar
さんrecode
を使用して一つです。 this questionから
library(car)
mydf$col3 <- recode(mydf$col1, "1 = 'A'; 2 = 'B'; 3 = 'C'; 4 = 'D'")
つ以上:
mydf$col4 <- c("A", "B", "C", "D")[mydf$col1]
あなたは?symnum
を見ている可能性があります。
あなたのケースでは、のようなもの:
col2<-symnum(col1, seq(0.5, 4.5, by=1), symbols=c("G", "H", "J", "K"))
は、あなたが近くに取得する必要があります。
:
col2 <- ifelse(col1==1, "G",
ifelse(col1==2, "H",
ifelse(col1==3, "J",
ifelse(col1==4, "K",
NA )))) # all other values map to NA
それはやり過ぎだ。この単純なケースではなく、より複雑なため...
"より複雑なもののために..." - より複雑なものは入れ子にされた 'ifelse'を**より良い**アイデアにしますか?それは私には直観的ではありません。 –
@TheRedPeaより複雑な条件では、異なる列に基づいており、互いに関連していません。 – Marek
ええ、私は選択肢がないかもしれないが、if文で論理を表現すると思います。 –
どのようなプログラミング言語を使用していますか? –
@TheGiG OPは[tag:r]で質問をマークしました – Andrie
関連性:[case statement equivalent](http://stackoverflow.com/q/4622060/168747)、['dataに列を追加するにはどうすればいいですか?フレーム?」(http://stackoverflow.com/q/4562547/168747)、[Excelシートでのデータクリーニング](http://stackoverflow.com/q/7374314/168747)(この別のリンクセット)。 – Marek