我有一个widedf,columns代表许多给定years中的months个,每个month中的 colored颜色 变化:

df <- data.frame(id = as.integer(c(123,124,125,126)),
                 no_change = as.character(c("May.2010", NA, NA, "Sep.2010")),
                 `Jan.2010` = as.character(c("green", "black", "pink", "grey")),
                 `Feb.2010` = as.character(c("green", "black", "pink", "grey")),
                 `Mar.2010` = as.character(c("green", "red", "pink", "grey")),
                 `Apr.2010` = as.character(c("green", "red", "pink", "grey")),
                 `May.2010` = as.character(c("green", "red", "pink", "grey")),
                 `Jun.2010` = as.character(c("green", "red", "pink", "grey")),
                 `Jul.2010` = as.character(c("green", "white", "pink", "grey")),
                 `Ago.2010` = as.character(c("red", "white", "pink", "grey")),
                 `Sep.2010` = as.character(c("red", "white", "pink", "grey")),
                 `Oct.2010` = as.character(c("red", "white", "pink", "grey")),
                 `Nov.2010` = as.character(c("red", "white", "pink", "grey")),
                 `Dez.2010` = as.character(c("red", "white", "grey", "blue"))
                 )
df     
   id no_change Jan.2010 Feb.2010 Mar.2010 Apr.2010 May.2010 Jun.2010 Jul.2010 Ago.2010 Sep.2010 Oct.2010 Nov.2010 Dez.2010
1 123  May.2010    green    green    green    green    green    green    green      red      red      red      red      red
2 124      <NA>    black    black      red      red      red      red    white    white    white    white    white    white
3 125      <NA>     pink     pink     pink     pink     pink     pink     pink     pink     pink     pink     pink     grey
4 126  Sep.2010     grey     grey     grey     grey     grey     grey     grey     grey     grey     grey     grey     blue     

我希望将NA应用于包含等于或高于column‘no_change’中指定的month的每个column.这就是理想的output:

   id no_change Jan.2010 Feb.2010 Mar.2010 Apr.2010 May.2010 Jun.2010 Jul.2010 Ago.2010 Sep.2010 Oct.2010 Nov.2010 Dez.2010
1 123  May.2010    green    green    green    green       NA       NA       NA       NA       NA       NA       NA       NA
2 124      <NA>    black    black      red      red      red      red    white    white    white    white    white    white
3 125      <NA>     pink     pink     pink     pink     pink     pink     pink     pink     pink     pink     pink     grey
4 126  Sep.2010     grey     grey     grey     grey     grey     grey     grey     grey       NA       NA       NA       NA

推荐答案

您可以将格式pivot转换为"长"格式,并找出哪些行应该转换为NA.

library(tidyverse)

df %>% 
  pivot_longer(ends_with("2010")) %>% 
  group_by(id) %>% 
  mutate(value = ifelse(cumsum(name == no_change & !is.na(no_change)), NA, value)) %>% 
  pivot_wider() %>% 
  ungroup()

# A tibble: 4 × 14
     id no_change Jan.2010 Feb.2010 Mar.2010 Apr.2010 May.2010 Jun.2010 Jul.2010 Ago.2010 Sep.2010 Oct.2010 Nov.2010 Dez.2010
  <int> <chr>     <chr>    <chr>    <chr>    <chr>    <chr>    <chr>    <chr>    <chr>    <chr>    <chr>    <chr>    <chr>   
1   123 May.2010  green    green    green    green    NA       NA       NA       NA       NA       NA       NA       NA      
2   124 NA        black    black    red      red      red      red      white    white    white    white    white    white   
3   125 NA        pink     pink     pink     pink     pink     pink     pink     pink     pink     pink     pink     grey    
4   126 Sep.2010  grey     grey     grey     grey     grey     grey     grey     grey     NA       NA       NA       NA      

R相关问答推荐

当y大于阈值和值范围时,在时间序列中突出显示区域

R图中的字体大小和字体样式(带有R底图)

如何将多个数据帧附加到R中的多个相应的CSV文件中?

从载体创建 pyramid

有没有方法将琴弦完全捕捉到R中的多边形?

如何根据包含相同值的某些列获取总额

找出疾病消失的受试者

如何直接从Fortran到R的数组大小?

如何将旋转后的NetCDF转换回正常的纬度/经度网格,并使用R?

如何使用STAT_SUMMARY向ggplot2中的密度图添加垂直线

在数组索引上复制矩阵时出错

如何从R ggplot图片中获取SVG字符串?

方法::slotName如何处理非类、非字符的参数?

如何通过匹配R中所有可能的组合来从宽到长旋转多个列?

R -在先前group_by级别汇总时获取最大大小子组的计数

为左表中的所有行使用值Fill滚动左连接

如何移除GGPlot中超出与面相交的任何格网像元

减go R中列表的所有唯一元素对

使用不同的定性属性定制主成分分析中点的 colored颜色 和形状

如何预测原始数据集并将值添加到原始数据集中