我必須在下面的當前資料框:
| ID | 等級_所有 | 最高 |
|---|---|---|
| 1 | 經過 | 1 |
| 1 | 失敗 | 0 |
| 1 | 失敗 | 0 |
| 2 | 經過 | 0 |
| 2 | 失敗 | 1 |
| 3 | 失敗 | 1 |
| 3 | 經過 | 0 |
我想要這個:
| ID | 等級_所有 | 最高 | final_grade |
|---|---|---|---|
| 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] ```
uj5u.com熱心網友回復:
使用您提供的附加資訊,我將您的問題解釋如下:如果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
uj5u.com熱心網友回復:
那這個呢?
> 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
uj5u.com熱心網友回復:
利用 1 被解釋為邏輯 TRUE 的優勢,反之亦然,測驗每個 ID 是否有任何“最高”為 1,并相應地索引 c('fail', 'pass'):
df %>%
group_by(ID) %>%
mutate(final_grade = c('fail','pass')[any(highest) 1])
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/468932.html
下一篇:使用dplyr動態創建列
