![](/img/trans.png)
[英]R - How to create multiple datasets based on levels of factor in multiple columns?
[英]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.