在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循环,但我不知道如何启动它。
答案 0 :(得分:4)
您可以使用dplyr:
User.popular_users_for(friend_id)
答案 1 :(得分:0)
这个想法是:
如果数据太大,您可能需要使用更快的软件包,例如 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