簡體   English   中英

如何根據條件創建與另一列具有相同值的新列?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM