首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中分组数据的计算

R中分组数据的计算
EN

Stack Overflow用户
提问于 2014-02-10 17:36:33
回答 1查看 127关注 0票数 1

我在R中被困在下面的问题上,我希望有人能快速解决。

我有两组数据,A和B,其中A包含控制组的数据,B包含病例组的数据。对于每一组,我都有相同变量的度量。在A和B中是子组--在某些情况下,它们是A和B之间的配对--假设它们是兄弟姐妹,其中一个或多个可以是一个案例,一个或多个是对照。

数据如下所示:

集A:

代码语言:javascript
复制
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   

集B:

代码语言:javascript
复制
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,Area是感兴趣的变量,group是组,其余是这里不感兴趣的附加变量。

我想要做的是计算集合B中每一个个体的相对面积--即相对于集合A中的兄弟姐妹的平均面积。我希望这个值在集合B中以独立列的形式出现(在下面的样本relArea下)。因此,输出将如下所示:

产出(B组):

代码语言:javascript
复制
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中的所有测量值)的面积。

如果能在这方面提供任何帮助,我将不胜感激。

谢谢,

比约恩

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-10 17:47:11

您可以用aggregate计算A组中每组的平均面积,然后添加新列:

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21684135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档