2014-02-10 108 views
1

我在R中遇到以下問題,並希望有人有一個快速解決方案。R中分組數據的計算

我有兩組數據,A和B,其中A包含控件組的數據,B是一個案例組。我有針對每個組的相同變量的措施。 在A和B中是子組 - 在某些情況下它們在A和B之間配對 - 比方說,它們是兄弟姐妹,其中一個或多個可以是案例,一個或多個是控制。
數據是這個樣子:

SET答:

Source Area group pch pch2 col col2 group2 
R1-1 1983447  1 0  16 1  1 1 
R1-3 1400362  1 0  16 1  1 1 
R3-4 2834393  2 1  16 2  2 1 
R4-2 2232820  3 2  16 3  3 1 
R4-5 1713796  3 2  16 3  3 1 
R4-6 1525740  3 2  16 3  3 1 
R4-7 1182300  3 2  16 3  3 1 

SET B:

Source Area group pch pch2 col col2 group2 
R1-2 1246124  1 0  16 1  1 2 
R3-1 1627610  2 1  16 2  2 2 
R3-2 1401600  2 1  16 2  2 2 
R4-1 1367146  3 2  16 3  3 2 
R4-3 1764125  3 2  16 3  3 2 
R4-4 1299864  3 2  16 3  3 2 

來源是ID,面積爲感興趣的變量,組組,其餘的是額外的變量,在這裏不感興趣。
我想要做的是計算集合B中每個個體的相對面積 - 即相對於它們在集合A中的同胞的平均面積。我希望這個值在集合B中顯示爲單獨列(在relArea下面的示例中)。因此,輸出應該是這樣的:

輸出(B組):

Source Area group relArea pch pch2 col col2 group2 
R1-2 1246124 1 0.736521476 0 16  1 1 2 
R3-1 1627610 2 0.574235824 1 16  2 2 2 
R3-2 1401600 2 0.494497411 1 16  2 2 2 
R4-1 1367146 3 0.821768097 2 16  3 3 2 
R4-3 1764125 3 1.06038539 2 16  3 3 2 
R4-4 1299864 3 0.781326037 2 16  3 3 2 

最後,如果集合B的個體不具有集合A中的兄弟姐妹,那麼他的relArea值將是區域相對於所有對照的平均面積(即,組A中的所有測量)。

任何幫助,這將不勝感激。

感謝,
比約恩

+1

你見過嗎? http://stackoverflow.com/a/11562850/636656只是適應你自己的情況。 –

回答

3

你可以計算在設定每個組的平均面積與aggregate,然後添加新列:

seta = read.table(text="Source Area group pch pch2 col col2 group2 
    R1-1 1983447  1 0  16 1  1 1 
    R1-3 1400362  1 0  16 1  1 1 
    R3-4 2834393  2 1  16 2  2 1 
    R4-2 2232820  3 2  16 3  3 1 
    R4-5 1713796  3 2  16 3  3 1 
    R4-6 1525740  3 2  16 3  3 1 
    R4-7 1182300  3 2  16 3  3 1 ", header=T) 
setb = read.table(text="Source Area group pch pch2 col col2 group2 
    R1-2 1246124  1 0  16 1  1 2 
    R3-1 1627610  2 1  16 2  2 2 
    R3-2 1401600  2 1  16 2  2 2 
    R4-1 1367146  3 2  16 3  3 2 
    R4-3 1764125  3 2  16 3  3 2 
    R4-4 1299864  3 2  16 3  3 2", header=T) 
grouped.area = aggregate(seta$Area, by=list(group=seta$group), mean) 
setb$relArea = setb$Area/grouped.area$x[match(setb$group, grouped.area$group)] 
setb$relArea 
# [1] 0.7365215 0.5742358 0.4944974 0.8217681 1.0603854 0.7813260 
+0

非常好,謝謝你的幫助。這像一個魅力。我不得不添加一個命令行來計算在setA中沒有兄弟的個體的值:is.na(setB $ relArea)< - setB $ Area/mean(setA $ Area) – bjornlovesR

+0

實際上,這是不正確的。我添加了這個命令:setb $ relArea < - ifelse(is.na(setb $ relArea),setb $ Area/mean(seta $ Area),setb $ relArea)。也許不是優雅,但它的作品。 – bjornlovesR