簡體   English   中英

R:如何根據多列中的因子水平減去值?

[英]R: How to substract values depending on factor levels on multiple columns?

我有一個像這樣的數據框(使用reshape2 :: cast和merge):

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

我想從處理過的樣本中減去對照樣本的不同動物的值。 當然,減法應在其他因素的水平相匹配的地方進行,因此應將“ 11_86_tained_A_water_3”的動物1值減去“ 11_86_control_A_water_3”的動物1值,並針對每只動物減少該值。 我一直在嘗試像plyr這樣的東西

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

但這給了我很多資產凈值,我敢肯定,缺少足夠的信息來執行我想要的東西。 實際上有一百種動物。

我的嘗試從此處改編,但是輸入變量較少,要執行的列也較少: 從與所有其他因子水平相關的值中減去與一個因子水平相關的最簡單方法 ,在這里: R ddply有多個變量

也可以等到將表重新整形為ggplot的長格式,如果這樣會使事情變得更容易?

您對我有什么建議嗎?

這不是最優雅的方法,但是您可以創建一個名為group_string的新列,該列是包含所有不同因素的隱式字符串,就像您在示例中已經提到的那樣。 但無論是“控制”還是“治療”將是最后一個爭論。 因此,例如代替

"11_86_treated_A_water_3""11_86_control_A_water_3"

你將會擁有

"11_86_A_water_3_treated""11_86_A_water_3_control"

然后,您可以在沒有處理/控制子字符串的情況下遍歷所有唯一字符串的循環,例如,一個唯一字符串是"11_86_A_water_3_" ,對於其中的每一個,從已“處理”的行中group_string中具有“控制”的行在group_string

編輯: 好的,只是另一個想法。 按除治療之外的所有因素(時間,天數,extrafactor1,extrafactor2,extrafactor3)分組,這應該為每個子組留兩行。 然后使用diff()為每個子組計算這兩行之間的差。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM