r - dplyr 切片新变量
问题描述
data=data.frame("student"=c(1,1,1,1,2,2,2,3,3,3,3,4,4,4,4),
"year"=c(2014,2015,2016,2017,2014,2015,2016,2014,2015,2016,2017,2014,2015,2016,2017),
"grade"=c(9,10,11,12,9,10,11,9,10,11,12,9,10,11,12),
"scoreA"=c(0,0,0,0,0,0,2,0,1,1,2,0,0,1,1),
"scoreB"=c(0,0,0,0,0,0,2,0,0,1,2,0,0,0,1),
"WANTgradeA"=c(12,12,12,12,11,11,11,10,10,10,10,11,11,11,11),
"WANTscoreA"=c(0,0,0,0,2,2,2,1,1,1,1,1,1,1,1),
"WANTgradeB"=c(12,12,12,12,11,11,11,11,11,11,11,12,12,12,12),
"WANTscoreB"=c(0,0,0,0,2,2,2,1,1,1,1,1,1,1,1))
这是我的数据。我的预期输出是以'WANT'开头的所有变量
- 当 scoreA 大于 0 并且 WANTgradeA 等于第一个/最小 GRADE 时
如果 scoreA 从未超过 0,则 WANTgradeA 等于 GRADE 的最大值,WANTscoreA 等于 scoreA 的最大值。
当 scoreB 大于 0 并且 WANTgradeB 等于第一个/最小 GRADE 时
- 如果 scoreB 从未超过 0,则 WANTgradeB 等于 GRADE 的最大值,WANTscoreB 等于 scoreB 的最大值
我的尝试未能添加这 4 个新变量,而是截断了数据
data %>%
group_by(student) %>%
filter(value == max(score > 0))
解决方案
这是一个dplyr
解决方案 -
df %>%
group_by(student) %>%
mutate(
wgradeA = case_when(
any(scoreA > 0) ~ grade[scoreA > 0][1],
TRUE ~ max(grade)
),
wscoreA = scoreA[match(TRUE, scoreA > 0, nomatch = 1)],
wgradeB = case_when(
any(scoreB > 0) ~ grade[scoreB > 0][1],
TRUE ~ max(grade)
),
wscoreB = scoreB[match(TRUE, scoreB > 0, nomatch = 1)]
) %>%
ungroup()
# A tibble: 15 x 13
student year grade scoreA scoreB WANTgradeA WANTscoreA WANTgradeB WANTscoreB wgradeA wscoreA wgradeB wscoreB
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 2014 9 0 0 12 0 12 0 12 0 12 0
2 1 2015 10 0 0 12 0 12 0 12 0 12 0
3 1 2016 11 0 0 12 0 12 0 12 0 12 0
4 1 2017 12 0 0 12 0 12 0 12 0 12 0
5 2 2014 9 0 0 11 2 11 2 11 2 11 2
6 2 2015 10 0 0 11 2 11 2 11 2 11 2
7 2 2016 11 2 2 11 2 11 2 11 2 11 2
8 3 2014 9 0 0 10 1 11 1 10 1 11 1
9 3 2015 10 1 0 10 1 11 1 10 1 11 1
10 3 2016 11 1 1 10 1 11 1 10 1 11 1
11 3 2017 12 2 2 10 1 11 1 10 1 11 1
12 4 2014 9 0 0 11 1 12 1 11 1 12 1
13 4 2015 10 0 0 11 1 12 1 11 1 12 1
14 4 2016 11 1 0 11 1 12 1 11 1 12 1
15 4 2017 12 1 1 11 1 12 1 11 1 12 1
推荐阅读
- python - 根据列表的最后一个值和第一个值在python中附加嵌套列表
- javascript - 在局部变量中保存重复访问的对象属性是否有缺点?
- javascript - Powershell中的Javascripts encodeURI等价物?
- git - 无法克隆 Git Repo:SSL 替代证书错误
- html - 中间“数据标签”中的新行
- java - 无法从 firebase 获取结果并显示在警报对话框中
- python - 如何在python中将文本文件拆分为适当数量的列?
- android - Android:ClickableSpan 与 EditText 中行尾的文本不匹配。我怎样才能解决这个问题?
- angular - ngrx 8 选择器的效果
- excel - 如何循环遍历一个范围加一个整数?