如何使用循环查找大型数据框中某些值的平均值

时间:2017-11-17 17:06:12

标签: r dataframe

在R中,我有一个如下所示的数据框:

         Female.ID    Mate.ID  relatedness
    1           A1         C1       0.0000
    2           A1         D1       0.0000 
    3           A1         E1       0.5062
    4           A1         F1           NA
    5           B1         G1       0.0425
    6           B1         H1       0.0000
    7           B1         I1       0.0349
    8           B1         J1       0.0000
    9           B1         K1       0.0000
    10          B1         L1       0.0887
    11          B1         M1       0.1106
    12          B1         N1       0.0000

我想创建一个新的数据框,并找到女性所有配偶的平均相关性.ID A1和所有女性配偶的平均相关性.ID B1等。

我想要这样的事情:

    Female.ID    mean.relatedness
           A1              0.1687
           B1              0.0346

这个数据框比这个例子大得多,这就是为什么我不只是逐个为女性进行子集化并找到平均相关性。我正在考虑做一些for循环,但我不知道如何启动它。

2 个答案:

答案 0 :(得分:4)

您可以使用dplyr:

User.popular_users_for(friend_id)

答案 1 :(得分:0)

这个想法是:

  • 通过" Female.ID"
  • 分组
  • 然后使用平均值进行汇总,同时忽略NA。

如果数据太大,您可能需要使用更快的软件包,例如 data.table (这是一个语法简单的快速软件包)。有关详细信息,请查看此链接data.table vs dplyr: can one do something well the other can't or does poorly?

一般来说,循环在R中没有优化。只有在包装不能支持治疗的情况下,它才能作为最终解决方案保留。

这里的语法使用data.table(df是初始data.frame)

library(data.table)

dt<- as.data.table(df)
dt1 <- dt[, .(mean.relatedness= mean(relatedness, na.rm = TRUE)),
            by="Female.ID"]
>dt1
 Female.ID mean.relatedness
1:        A1        0.1687333
2:        B1        0.0345875

请注意,分组可以通过多变量向量完成,汇总函数可以不是均值,并且总结时需要 na.rm = TRUE 来忽略NA