首页 > 解决方案 > R - 绑定来自某些列和选定行的值并在组内替换它们

问题描述

我想创建一个名为的新变量,Var3它结合了. 我的数据按(长格式)分组。在任何行(例如 ID 3)中没有 1 on 的情况下,应该有 NA's on 。YearMonthVar1 == 1IDVar1Var3

df <- read.table(text=
"ID    Var1   Year      Month
1      0      2008      2         
1      0      2009      2   
1      0      2010      2   
1      0      2011      2   
1      1      2013      2   
1      0      2014      10  
2      0      2008      2         
2      0      2010      2   
2      1      2011      2   
2      0      2013      2   
2      0      2015      11  
3      0      2010      2   
3      0      2011      2   
3      0      2013      2   
3      0      2015      11  
3      0      2017      10", header=TRUE) 

我的预期结果是这样的:

df <- read.table(text=
"ID    Var1   Year      Month     Var2    
1      0      2008      2         20132     
1      0      2009      2         20132
1      0      2010      2         20132
1      0      2011      2         20132
1      1      2013      2         20132       
1      0      2014      10        20112
2      0      2008      2         20112      
2      0      2010      2         20112
2      1      2011      2         20112       
2      0      2013      2         20112
2      0      2015      11        20112
3      0      2010      2         NA
3      0      2011      2         NA
3      0      2013      2         NA    
3      0      2015      11        NA     
3      0      2017      10        NA",header=TRUE) 

我试图弄清楚如何使用dplyr. 我很新,tidyverse因此任何建议都非常受欢迎。我已经发现我必须使用group_by(ID)并且可能mutate创建新变量。有人可以帮帮我吗?

标签: rgroupingdplyr

解决方案


一种可能的解决方案dplyr

df %>% 
  group_by(ID) %>% 
  mutate(Var3 = ifelse(Var1 == 1, paste0(Year, Month), NA)) %>%
  mutate(Var3 = max(Var3, na.rm = TRUE))

它背后的想法是:首先,将YearMonthwhere粘贴在一起Var1 == 1,然后在每个组Var3中,使用诸如max(但也可以是min)删除 NA 值的函数传播唯一存在的值。

输出

# A tibble: 16 x 5
# Groups:   ID [3]
      ID  Var1  Year Month Var3 
   <int> <int> <int> <int> <chr>
 1     1     0  2008     2 20132
 2     1     0  2009     2 20132
 3     1     0  2010     2 20132
 4     1     0  2011     2 20132
 5     1     1  2013     2 20132
 6     1     0  2014    10 20132
 7     2     0  2008     2 20112
 8     2     0  2010     2 20112
 9     2     1  2011     2 20112
10     2     0  2013     2 20112
11     2     0  2015    11 20112
12     3     0  2010     2 NA   
13     3     0  2011     2 NA   
14     3     0  2013     2 NA   
15     3     0  2015    11 NA   
16     3     0  2017    10 NA

推荐阅读