![](/img/trans.png)
[英]How to create a new column based on condition from another column, but with outputs beyond binary values
[英]How to create a new column with the same values of another column based on a condition?
我必须在下面显示当前数据框:
ID | 全部成绩 | 最高 |
---|---|---|
1个 | 经过 | 1个 |
1个 | 失败 | 0 |
1个 | 失败 | 0 |
2个 | 经过 | 0 |
2个 | 失败 | 1个 |
3个 | 失败 | 1个 |
3个 | 经过 | 0 |
我想要这个:
ID | 全部成绩 | 最高 | 最终成绩 |
---|---|---|---|
1个 | 经过 | 1个 | 经过 |
1个 | 失败 | 0 | 经过 |
1个 | 失败 | 0 | 经过 |
2个 | 经过 | 0 | 失败 |
2个 | 失败 | 1个 | 失败 |
3个 | 失败 | 1个 | 失败 |
3个 | 经过 | 0 | 失败 |
我希望具有 1 的行成为取代并将该值放入同一学生(相同 ID)的每一行的行。 我认为这会起作用,但它给了我一个错误
df <- df %>%
group_by(ID)%>%
mutate(final_grade = grade_all[highest ==1]
根据您提供的附加信息,我将您的问题解释如下:如果highest == 1
那么它应该采用grade_all
的值并将其应用于新列final_grade
的组中的所有成员:
library(dplyr)
library(zoo)
df %>%
group_by(ID) %>%
mutate(final_grade = ifelse(highest == 1, grade_all, NA_character_),
final_grade = zoo::na.locf(final_grade))
ID grade_all highest final_grade
<int> <chr> <int> <chr>
1 1 pass 1 pass
2 1 fail 0 pass
3 1 fail 0 pass
4 2 pass 0 fail
5 2 fail 1 fail
6 3 fail 1 fail
7 3 pass 0 fail
那这个呢?
> df %>%
+ group_by(ID) %>%
+ mutate(final_grade = grade_all[highest > 0]) %>%
+ ungroup()
# A tibble: 7 x 4
ID grade_all highest final_grade
<int> <chr> <int> <chr>
1 1 pass 1 pass
2 1 fail 0 pass
3 1 fail 0 pass
4 2 pass 0 fail
5 2 fail 1 fail
6 3 fail 1 fail
7 3 pass 0 fail
使用data.table
:
library(data.table)
setDT(df)[, final_grade:=grade_all[which(highest==1)], keyby=.(ID)]
df
利用 1 被解释为逻辑 TRUE 的优势,反之亦然,测试每个 ID 的任何“最高”是否为 1 并相应地索引 c('fail', 'pass'):
df %>%
group_by(ID) %>%
mutate(final_grade = c('fail','pass')[any(highest) + 1])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.