【问题标题】:Merge rows with multiple data class [duplicate]合并具有多个数据类的行[重复]
【发布时间】:2017-06-08 12:46:38
【问题描述】:

我正在尝试将两行合并在一起,以便输出是两全其美的。我已经阅读了一些使用ddplyaggregate 的解决方案,但是它们仅适用于数字数据。

下面是我正在尝试做的一个示例。

输入:

x <- c("Yemen", 1, NA, NA, 4, 5, "Six")
y <- c("Yemen", NA, "B", 3, NA, 6, "Six")

DF <- as.data.frame(rbind(x,y))
colnames(DF)[1] <- c("CNTRY")

输出

"Yemen", 1, "B", 3, 4, 5, "Six"

密钥是CNTRY

理想情况下,我应该能够选择是否保留 xy 的值(如果它们不同)。


编辑 1:

在此示例中,该解决方案应适用于数据框 DF,而不是 xy。我的数据框有多个重复的帐户,我正在尝试合并具有多个实例但共享帐户(键)的所有行。

【问题讨论】:

    标签: r dataframe dplyr plyr tidyverse


    【解决方案1】:

    我们可以使用dplyr中的coalesce函数

    library(dplyr)
    coalesce(x,y)
    #[1] "Yemen" "1"     "B"     "3"     "4"     "5"     "Six"  
    

    【讨论】:

      【解决方案2】:

      使用 tidyr 包中的填充:

      # dummy data with 2 countries to group on
      x <- c("Yemen", 1, NA, NA, 4, 5, "Six")
      y <- c("Yemen", NA, "B", 3, NA, 6, "Six")
      xx <- c("XXX", 3, NA, 33, 4, 7, "Four")
      yy <- c("XXX", 2, "B", NA, NA, NA, NA)
      DF <- as.data.frame(rbind(x,y,xx,yy))
      colnames(DF)[1] <- c("CNTRY")
      
      # using tidyr fill function up and down
      library(dplyr)
      library(tidyr)
      
      DF %>% group_by(CNTRY) %>% 
        fill_(colnames(DF), .direction = "down") %>% 
        fill_(colnames(DF), .direction = "up") %>% 
        slice(1)
      
      # Source: local data frame [2 x 7]
      # Groups: CNTRY [2]
      # 
      #    CNTRY     V2     V3     V4     V5     V6     V7
      #   <fctr> <fctr> <fctr> <fctr> <fctr> <fctr> <fctr>
      # 1    XXX      3      B     33      4      7   Four
      # 2  Yemen      1      B      3      4      5    Six
      

      【讨论】:

        猜你喜欢
        • 2015-12-08
        • 1970-01-01
        • 2019-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-05
        相关资源
        最近更新 更多