DATA = data.frame("TRIMESTER" = c(1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3),
"STUDENT" = c(1,2,3,4,5,6,7,1,2,3,5,9,10,11,3,7,10,6,12,15,17,16,21))
WANT = data.frame("TRIMESTER" = c(1,2,3),
"NEW_ENROLL" = c(7,3,5),
"TOTAL_ENROLL" = c(7,10,15))
Run Code Online (Sandbox Code Playgroud)
我有“数据”,想要制作“想要”,它有三列,对于每个“学期”,您计算新“学生”的数量,然后对于“TOTAL_ENROLL”,您只需计算每个学期唯一“学生”的总数。
我的尝试只计算每个学期的数量。
library(dplyr)
DATA %>%
group_by(TRIMESTER) %>%
count()
Run Code Online (Sandbox Code Playgroud)
这是一个方法。
\nsuppressPackageStartupMessages(library(dplyr))\n\nDATA <- data.frame("TRIMESTER" = c(1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3),\n "STUDENT" = c(1,2,3,4,5,6,7,1,2,3,5,9,10,11,3,7,10,6,12,15,17,16,21))\nDATA %>% \n mutate(NEW_ENROLL = !duplicated(STUDENT)) %>%\n group_by(TRIMESTER) %>%\n summarise(NEW_ENROLL = sum(NEW_ENROLL)) %>%\n ungroup() %>%\n mutate(TOTAL_ENROLL = cumsum(NEW_ENROLL))\n#> # A tibble: 3 \xc3\x97 3\n#> TRIMESTER NEW_ENROLL TOTAL_ENROLL\n#> <dbl> <int> <int>\n#> 1 1 7 7\n#> 2 2 3 10\n#> 3 3 5 15\nRun Code Online (Sandbox Code Playgroud)\n由reprex 包于 2022 年 8 月 14 日创建(v2.0.1)
\nBase R aggregate使用transformtransform(aggregate(. ~ TRIMESTER , DATA[!duplicated(DATA$STUDENT),] , length),
TOTAL_ENROLL = cumsum(STUDENT))
Run Code Online (Sandbox Code Playgroud)
TRIMESTER STUDENT TOTAL_ENROLL
1 1 7 7
2 2 3 10
3 3 5 15
Run Code Online (Sandbox Code Playgroud)