【问题标题】:Merging two data frames with missing values合并两个缺失值的数据框
【发布时间】:2020-10-01 02:52:19
【问题描述】:

我想合并两个数据框(df1 和 df2)。下面的脚本适用于字母。但是,当我用“-”添加一个 df 时,它就不再起作用了。我尝试在 df1 中将“-”添加为“”,但也失败了。

我希望脚本在遇到“-”时跳过或留空。

注意:我需要知道空白在哪里,所以我不想从数据框中删除空白。

任何意见都非常感谢!

  df1 <- data.frame(scale = c(0.62, 0.29, -0.9, -0.74, 1.19, 0.48, -0.4, 1.38, -1.5, 1.06, 0.64, -0.78, 0.12, -0.85, -2.53, -0.18, -0.05, 1.08, 0.81, 0.26,""), 
                            aa = c('A','C','D','E','F','G','H','I','K','L','M','N','P','Q','R','S','T','V','W','Y','-'))
   



df2 <- df(col1 = c('-', '-' ,'E', 'S', 'P', 'V', 'F', 'A', 'F', 'P', 'K', 'A', 'L', 'D', 'L', 'E', 'T' ,'H', 'I', 'E', 'K' ,'L', 'F', 'L', 'Y'),
col2 = c('D','D','T','L','D','D','S','D','E','D','D','I','V','V','E','S','Q','D','P','P','L','-','S','W','-'))



matched_res_all <- df2 %>%
  left_join(df1, by = c(col1 = "aa")) %>% 
  left_join(df1, by = c(col2 = "aa"))

view(matched_res_all)

【问题讨论】:

    标签: r dataframe merge


    【解决方案1】:

    为了使解决方案对df2 中的许多此类'col' 变量具有可扩展性,我们可以获取长格式数据,删除存在"-" 的行并将数据与df1 连接起来。

    library(dplyr)
    library(tidyr)
    
    df2 %>%
      pivot_longer(cols = everything(), values_to = 'aa') %>%
      mutate(aa = replace(aa, aa == '-', '')) %>%
      left_join(df1, by = 'aa') %>%
      arrange(name) %>%
      group_by(name) %>%
      mutate(row = row_number()) %>%
      pivot_wider(names_from = name, values_from = c(aa, scale)) %>%
      select(-row)
    
    #  aa_col1 aa_col2 scale_col1 scale_col2
    #   <chr>   <chr>   <chr>      <chr>     
    # 1 ""      D       NA         -0.9      
    # 2 ""      D       NA         -0.9      
    # 3 "E"     T       -0.74      -0.05     
    # 4 "S"     L       -0.18      1.06      
    # 5 "P"     D       0.12       -0.9      
    # 6 "V"     D       1.08       -0.9      
    # 7 "F"     S       1.19       -0.18     
    # 8 "A"     D       0.62       -0.9      
    # 9 "F"     E       1.19       -0.74     
    #10 "P"     D       0.12       -0.9      
    # … with 15 more rows
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-03
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      • 2016-04-30
      • 2018-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多