2017-09-05 19 views
0

は、私はこのように見ているデータフレーム持っている(reshape2を使用して::キャストをし、マージ):R:複数の列の因子レベルに応じて値を引く方法は?

time days treatment extrafactor1 extrafactor2 extrafactor3 animal1 animal2 animal3 
10 83 control B water 2 2 67 40 
10 83 control B water 3 50 67 39 
10 83 control A water 3 22 80 63 
10 83 control A water 2 40 40 100 
10 83 treated A water 3 40 69 92 
10 83 treated A water 1 64 56 6 
10 83 treated A water 2 90 67 52 
10 83 treated B water 2 14 36 77 
10 83 treated B water 3 41 83 55 
10 83 treated B water 1 66 31 51 
11 86 control B water 1 99 100 10 
11 86 control B water 2 23 27 22 
11 86 control A water 3 57 10 65 
11 86 control A water 1 60 2 49 
11 86 control A water 2 23 14 44 
11 86 control B water 3 97 45 20 
11 86 treated B water 2 71 15 24 
11 86 treated B water 3 49 55 63 
11 86 treated A water 3 54 88 27 

と私が処理されたサンプルから対照試料の異なる動物の値を減算するたいと思います。もちろん、減算は、他の因子のレベルが一致するところで行われるので、動物1値「11_86_treated_A_water_3」は、動物1値「11_86_control_A_water_3」およびこれを各動物について減少させるべきである。私は

df2 <- ddply(df, .(time,days,treatment,extrafactor1,extrafactor2,extrafactor3), transform, animal1 = animal1-animal1[treatment=="control"]) 

ようplyrでいくつかのことをしようとしてきたが、それは私に、NASの多くを与え、私は十分に私が持っているしたいものを実行するために不足している情報があったと確信しています。実際には100匹の動物がいる。

私の挑戦はここから適応が、あまりの入力変数と少ない列が上で実行することがありますされていますEasiest way to subtract associated with one factor level from values associated with all other factor levels 、ここで:R ddply with multiple variables

また、長い形式に整形テーブルまで待つことも可能であろうそれはggplotのために、それは物事を簡単にする場合?

私には何か提案がありますか?

+0

Hey!再現可能な例を作成するにはhttps://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-exampleをご覧ください。それは助けが簡単になります。 – elevendollar

+0

あなたの予想される出力は何ですか – Wen

答えて

1

ない最もエレガントな、しかし、あなたはすでにあなたの例で説明したあなたのようなすべての異なる要因の連接文字列であるgroup_stringと呼ばれる新しい列を作成することができます。しかし、それが「コントロール」か「治療された」かは、最後の議論になるだろう。あなたは

"11_86_A_water_3_treated""11_86_A_water_3_control"

を持つことになり、たとえば代わり​​の

"11_86_treated_A_water_3""11_86_control_A_water_3"

だから、その後、あなたは、例えば、治療/制御サブなしですべてのユニークな文字列をループを実行できます1つの一意の文字列が"11_86_A_water_3_"であり、それらのそれぞれについて、group_stringで "処置済み"の行からgroup_stringの "制御"を有する行を減算する。

編集: 治療(時間、日、extrafactor1、extrafactor2、extrafactor3)を除いて、各サブグループごとに2つの行を残してください。次に、diff()を使用して、各サブグループの2つの行の差を計算します。

+0

Hey Elevendollar、あなたの入力のために多くのおかげです...私はそれを連結して同様のケースで何度もやったことがあります、私はちょうどもっとエレガントな方法だろうと思った;-)私はあなたはそれが働いたときを知っている – crazysantaclaus

+0

ちょっと@crazysantaclaus。確実なこと。再現可能な例のリンクを見てください。それに応じてあなたの質問を編集すれば、誰かが助けることができると確信しています。 – elevendollar

関連する問題