繁体   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