2017-08-04 8 views
0

ダミー変数を作成したいと思います。使用される変数の1つが新たに作成され、ここで問題が発生します。Rデータフレームで、なぜ新しく作成された変数を条件内で使用して別の変数を作成できないのですか?

attach(originaldata) 
originaldata$hk_nonagr[hktype == 2 |hktype ==4 |hktype == 5] <- 1 
originaldata$hk_nonagr[hktype == 1 |hktype == 3 |hktype == 6 |hktype == 7] <- 0 
originaldata$hk_nonagr <- factor(originaldata$hk_nonagr, 
          levels = c(1, 0), 
          labels = c("yes", "no")) 

これは私の新しく作成された変数です。次に、それを使って別の変数を作成します。

originaldata$hk_effort[urbanhk == 1|urbanhk == 2|urbanhk == 3|urbanhk == 4|urbanhk == 7] <- 1 
originaldata$hk_effort[originaldata$hk_nonagr == 0 |yr_urbanhk == 9997|r_urbanhk == 5|r_urbanhk == 6|r_urbanhk ==8|r_urbanhk ==9] <- 0 

ここで問題が発生します。値0を割り当てることはできません。私は試しました

originaldata$hk_effort[originaldata$hk_nonagr == 0] <- 0 

私は問題が新しく作成された変数についてだと思います。条件で新しく作成された変数を使用するたびに同じ問題が発生します。

私はRの初心者ですので、このコード方法が悪いかどうか教えてください。 Stataでは、私は何かのように書くのに慣れています

replace x = 4 if (a == 1 | b ==3) & c != 8 

しかし、私は今、Rユーザーがこのようにコード化していないと感じています。事前にアドバイスをありがとうございます。

+0

あなたの問題はほぼ確実にあなたが 'attach'を使っていることです。それをしないでください。それは多くの問題に関連しています。代わりに 'with'を使うか、完全な名前をタイプするだけです。あなたはそのような頭痛を避けるでしょう。 – lmo

+0

サンプル入力データで[再現可能な例](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)を提供すると、所望の出力データ。また、Rコードで 'attach()'を使うのは良い考えではありません。このような突然変異については、 'dplyr'ライブラリを使って物事をきれいにすることも考えられます。 – MrFlick

+0

@Imo @ MrFlickありがとうございました。私は 'attch()'を避け、 'with'と' dplyr'を試してみます。 – DXC

答えて

0

dplyrとすると、mutateifelseを組み合わせて、何をしようとしているのかを確認できます。

Heredplyを条件変更に使用する方法を確認できます。

コード:

library(dplyr) 
originaldata <- originaldata %>% mutate(hk_nonagr = ifelse(hktype == 2 | 
       hktype ==4 | hktype == 5, 1, 
       ifelse(hktype == 1 |hktype == 3 |hktype == 6 |hktype == 7, 
       0))) 

originaldata <- originaldata %>% mutate(hk_effort = ifelse(urbanhk == 
       1 | urbanhk == 2 | urbanhk == 3 | urbanhk == 4 | urbanhk == 
       7, 1, 
       ifelse(hk_nonagr == 0 | yr_urbanhk == 9997| r_urbanhk == 
       5 | r_urbanhk == 6 | r_urbanhk ==8 | r_urbanhk ==9, 0))) 

これはやって1つの方法です、あなたは他のオプションを見つけることができます。

関連する問題