我一直在使用dplyr
来解决这个问题,但似乎无法找到一个好的解决方案。基本上,我有学生的姓名,学年和一些数字统计数据。像这样:
Name Yr. Stat_1 ...
A Fr. 5
B Fr. 5
A So. 5
A Jr. 5
B So. 5
C Sr. 5
我知道我可以使用命令dplyr::mutate(count = n())
在我完成group_by()
后查找单个学生的行数,但我想使用行数每个人都在众多统计数据的加权总和中(如果你愿意,可以使用混合模型)。但是,有一种情况,例如学生C,(无论是转学等)只作为一个Sr出现在数据中,所以我不能简单地使用一个大四学生已经进入第四年的理解。因此,我想将上表重新配置为如下所示,以便我可以使用dplyr
的{{1}}和group_by()
功能对各种统计信息进行加权。
mutate()
请注意Name Yr. Numb Stat_1 ...
A Fr. 1 5
B Fr. 1 5
A So. 2 5
A Jr. 3 5
B So. 2 5
C Sr. 1 5
的{{1}}为1而不是4.我希望对此问题有任何帮助或指导。
答案 0 :(得分:1)
我们可以在按名称'
分组后使用row_number
library(dplyr)
df1 %>%
group_by(Name) %>%
mutate(Numb = row_number())
# A tibble: 6 x 4
# Groups: Name [3]
# Name Yr. Stat_1 Numb
# <chr> <chr> <int> <int>
#1 A Fr. 5 1
#2 B Fr. 5 1
#3 A So. 5 2
#4 A Jr. 5 3
#5 B So. 5 2
#6 C Sr. 5 1
答案 1 :(得分:0)
这应该这样做:
df <- df %>%
group_by(Name) %>%
mutate(
class = factor(Yr.,levels = c("Fr.", "So.", "Jr.", "Sr.")) %>% as.numeric(),
years = n()
) %>%
group_by(Name, Yr.) %>%
mutate(
Numb = min(class, years)
) %>%
ungroup()
如果它们没用,你可以去掉课堂和年后。