【发布时间】:2019-06-07 19:19:42
【问题描述】:
我有两个数据集,一个在个人层面,一个在学校层面。我想使用循环计算每所学校的战斗比例(因为我有> 100所学校)。
当前代码:
for (i in levels(df$school_id)) {
school <- subset(df, school_id == i)
number_students <- nrow(school)
prop <- (sum(school$fight_binary, na.rm = TRUE))/number_students
df$proportion_fight[df$school_id == i] <- prop
}
我尝试先初始化新列,但是当我运行这个循环时,什么也没有发生。
这是一些示例数据
个人级别:
student_id school_id ever_fight
1 2 1
2 3 0
3 1 1
4 1 1
5 2 0
6 2 0
7 2 0
8 2 0
9 3 1
10 1 0
11 3 1
12 3 1
13 3 1
14 3 1
15 1 0
16 2 0
17 1 0
18 1 0
19 1 0
20 1 0
SCHOOL LEVEL(需要用上面的数据填充第二列):
school_id proportion_fight
1
2
3
【问题讨论】:
-
我觉得你需要
library(dplyr); df1 %>% group_by(school_id) %>% summarise(proportion = mean(ever_flight)) -
是的,有效!谢谢!
标签: r for-loop data-manipulation data-management