2016-08-01 11 views
2

異なる地域の350-600戸の農家に〜250の変数からなるデータセットがあります。データは非常に乱雑であり、分析に多くの問題を提示しています。私はRには新しいので、下のどのような助けも大歓迎です。元々、いくつかの列に複数の変数が含まれていました。 まで4までの入力(肥料、除草剤、農薬、およびハイブリッド種子)を含む「インプット」列。 tidyrspread()関数を使用して、4つの新しい変数(Input_1 ... Input_4)を作成しました。データフレーム内の列のサブセットをループして新しい変数を作成する方法

Input_1 <- c("Fertilisers", "Fertilisers", "Fertilisers", "Fertilisers", NA) 
Input_2 <- c("Hybrid_Seeds", "Hybrid_Seeds", "Pesticides", "Herbicides", NA) 
Input_3 <- c(NA, NA, NA, "Pesticides", NA) 
Input_4 <- c(NA, NA, NA, "Hybrid_Seeds", NA) 

x <- data.frame(Input_1, Input_2, Input_3, Input_4) 

x 

     Input_1  Input_2 Input_3  Input_4 
1 Fertilisers Hybrid_Seeds  <NA>   <NA> 
2 Fertilisers Hybrid_Seeds  <NA>   <NA> 
3 Fertilisers Pesticides  <NA>   <NA> 
4 Fertilisers Herbicides Pesticides Hybrid_Seeds 
5  <NA>   <NA>  <NA>   <NA> 

私は何をしたいと考えていますが、これらの新たに発生した「入力のそれぞれをループしている。その結果、新たに「入力」変数は、各行は単一農家を表し、次のシミュレートデータフレーム、のように見えます(例えば "肥料"または "殺虫剤")を検索し、結果を4つのタイプの入力のそれぞれについて新しい変数に「はい/いいえ」形式で入力します。データセット(肥料、農薬、除草剤およびハイブリッド種子)。言い換えれば、上記x上のループからの結果は、新しく作成された「はい/いいえ」の変数の次の列が生成されます。

Fertilisers <- c("Yes", "Yes", "Yes", "Yes", "No") 
Herbicides <- c("No", "No", "No", "Yes", "No") 
Pesticides <- c("No", "No", "Yes", "Yes", "No") 
Hybrid_Seeds <- c("Yes", "Yes", "No", "Yes", "No") 

x2 <- data.frame(Fertilisers, Herbicides, Pesticides, Hybrid_Seeds) 

x2 

    Fertilisers Herbicides Pesticides Hybrid_Seeds 
1   Yes   No   No   Yes 
2   Yes   No   No   Yes 
3   Yes   No  Yes   No 
4   Yes  Yes  Yes   Yes 
5   No   No   No   No 

時にデータフレームx私が望むものを視覚化することが容易とすることができ、 x2は一つに結合されている:4つの入力が特定の順序に従う

x3 <- data.frame(x, x2) 

x3 

     Input_1  Input_2 Input_3  Input_4 Fertilisers Herbicides 
1 Fertilisers Hybrid_Seeds  <NA>   <NA>   Yes   No 
2 Fertilisers Hybrid_Seeds  <NA>   <NA>   Yes   No 
3 Fertilisers Pesticides  <NA>   <NA>   Yes   No 
4 Fertilisers Herbicides Pesticides Hybrid_Seeds   Yes  Yes 
5  <NA>   <NA>  <NA>   <NA>   No   No 
    Pesticides Hybrid_Seeds 
1   No   Yes 
2   No   Yes 
3  Yes   No 
4  Yes   Yes 
5   No   No 

、すなわち肥料は常に最初(INPUT_1)であろう家庭で肥料を使用している場合、彼らは両方の肥料や除草剤を使用する場合、除草剤はINPUT_2なり(IF彼らは肥料と農薬を使用しますが、除草剤は使用しません。控除はInput_2などとなります。家計が4つのインプットをすべて使用する場合は、以下の順序で表示されます(上記の4行目を参照):肥料、除草剤、農薬、ハイブリッド種。

私はすべての4つの入力変数をループし、一致する文字列を検索し、関連する新しい入力変数に「Yes」を入力しようとしました(たとえば、 "肥料" "は4つの既存の"入力 "変数のいずれかにあります)、私はそれほど成功を収めていません。

この問題は、applyファミリの解決策ではないように思われますが、私は訂正されてうれしいです。繰り返しますが、私は一般的にRとプログラミングに新しいので、どんな助けも大歓迎です。私はforループでの経験は(非常に限られた)経験していますが、この問題は私にとっては非常に複雑であることが証明されており、解決には非常に重要です。

ありがとうございます。

答えて

1

私たちは、代わりに「はい/いいえ」に変更するのでバイナリ出力としてそれを残した方が良いですtable

tbl <- table(row(x), as.character(unlist(x))) 

を使用することができますが、私たちは、その後

tbl[] <- c("No", "Yes")[tbl+1] 

を変換する必要がある場合と、これをdata.frame

as.data.frame.matrix(tbl) 
# Fertilisers Herbicides Hybrid_Seeds Pesticides 
#1   Yes   No   Yes   No 
#2   Yes   No   Yes   No 
#3   Yes   No   No  Yes 
#4   Yes  Yes   Yes  Yes 
#5   No   No   No   No 
に変換することができます。
関連する問題