[英]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.