Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何基于两个变量的唯一配对合并r中的行?_R_Join_Dataframe_Merge_Dplyr - Fatal编程技术网

如何基于两个变量的唯一配对合并r中的行?

如何基于两个变量的唯一配对合并r中的行?,r,join,dataframe,merge,dplyr,R,Join,Dataframe,Merge,Dplyr,我为这个问题的古怪标题道歉。但我很难找出R中的这个争论问题。下面是一段数据的样子: example # A tibble: 6 x 6 # Groups: id, rel [4] id rel post_w avg_w b_wages a_wages <int> <date> <lgl> <dbl> <dbl> <dbl> 1 26

我为这个问题的古怪标题道歉。但我很难找出R中的这个争论问题。下面是一段数据的样子:

example

# A tibble: 6 x 6
# Groups:   id, rel [4]
     id        rel post_w      avg_w    b_wages   a_wages
  <int>     <date>  <lgl>      <dbl>      <dbl>     <dbl>
1  2699 2005-12-05  FALSE   904.5028   904.5028        NA
2  2739 2008-02-12  FALSE  1220.8129  1220.8129        NA
3  2739 2008-02-12   TRUE  2544.8736         NA  2544.874
4  2757 2008-02-06   TRUE  2624.3018         NA  2624.302
5  3240 2005-03-30  FALSE 18718.6454 18718.6454        NA
6  3240 2005-03-30   TRUE 15206.3203         NA 15206.320
示例
#一个tibble:6x6
#组:id,rel[4]
id相对邮政平均工资
126992005-12-05假904.5028904.5028NA
272392008-02-12假1220.81291220.8129NA
32739 2008-02-12真实2544.8736 NA 2544.874
427572008-02-06真实2624.3018北美2624.302
53240 2005-03-30假18718.6454 18718.6454 NA
6 3240 2005-03-30真实15206.3203北美15206.320
在我的分析中,变量id和rel一起创建了一个唯一的标识符。我试图让每个唯一的id,rel组合成为一行,其中包含平均工资,b_工资和a_工资的值。例如,在上面列出的数据中,id 2739和rel 2008-02-12有两个条目,尽管它们是我分析中的相同观察值。在一行中,观察值包含b_工资数据,在另一行中包含a_工资数据。我想做的是将这些观察结果折叠起来,使其看起来像这样

     id        rel post_w      avg_w    b_wages   a_wages
  <int>     <date>  <lgl>      <dbl>      <dbl>     <dbl>
2  2739 2008-02-12 (dropped)  (dropped)  1220.8129   2544.874
id rel post_w avg_w b_工资a_工资
272392008-02-12(下降)1220.81292544.874

post_w和avg_w列没有意义,如果需要,我可以删除它们。但我想弄清楚的是,我如何折叠具有相同id的行,将其关联到一行,并将b_工资值和a_工资值合并在一起,替换NA值,如图所示

您可以按id和rel对数据帧进行分组,然后通过获取第一个非NA值对其进行汇总;注意事项是,如果存在多个非NA值,则将取第一个值并删除其他值:

library(dplyr)
example %>% 
    group_by(id, rel) %>% 
    summarise(b_wages = na.omit(b_wages)[1], 
              a_wages = na.omit(a_wages)[1])

# A tibble: 4 x 4
# Groups:   id [?]
#     id        rel    b_wages   a_wages
#  <int>     <fctr>      <dbl>     <dbl>
#1  2699 2005-12-05   904.5028        NA
#2  2739 2008-02-12  1220.8129  2544.874
#3  2757 2008-02-06         NA  2624.302
#4  3240 2005-03-30 18718.6454 15206.320
库(dplyr)
示例%>%
分组依据(id,rel)%>%
总结(b_工资=na.省略(b_工资)[1],
a_工资=na.省略(a_工资)[1])
#一个tibble:4x4
#组:id[?]
#id相对工资
#                  
#126992005-12-05904.5028NA
#2  2739 2008-02-12  1220.8129  2544.874
#327572008-02-06NA 2624.302
#4  3240 2005-03-30 18718.6454 15206.320

我在这里尝试了你的方法,效果非常好!非常感谢!