【问题标题】:R: Merging rows by duplicates in first columnR:通过第一列中的重复项合并行
【发布时间】:2017-12-28 20:42:20
【问题描述】:

我有一个大型数据集,第一列中有重复值,如下所示:

ID         date      var1   var2
person1    052016    509    1678  
person2    122016    301    NA
person1    072016    NA     45

我想组合 ID 并通过“日期”获取最新的值,如果它是 NA - 获取它不是 NA 的最后一个值。 输出应该是这样的:

ID         date      var1   var2 
person2    122016    301    NA
person1    072016    509    45

我试过了,但是没有用。

library(dplyr)

data %>% group_by(ID) %>% summarise_all(funs(max(data$date))) %>% funs(first(.[!is.na(.)]))

我应该使用什么来将工作代码应用于整个数据集?

【问题讨论】:

    标签: r merge duplicates


    【解决方案1】:

    使用 的解决方案。

    library(dplyr)
    
    dat2 <- dat %>%
      arrange(ID, desc(date)) %>%
      group_by(ID) %>%
      summarise_all(funs(first(.[!is.na(.)]))) %>%
      ungroup()
    dat2
    # # A tibble: 2 x 4
    #   ID        date  var1  var2
    #   <chr>    <int> <int> <int>
    # 1 person1  72016   509    45
    # 2 person2 122016   301    NA
    

    数据

    dat <- read.table(text = "ID         date      var1   var2
    person1    '052016'    509    1678  
    person2    '122016'    301    NA
    person1    '072016'    NA     45",
                      header = TRUE, stringsAsFactors = FALSE)
    

    【讨论】:

      【解决方案2】:

      使用tidyversefill 函数。 加载数据:

      Mar_df <- structure(list(ID = structure(c(1L, 2L, 1L), .Label = c("person1", 
      "person2"), class = "factor"), date = c(52016L, 122016L, 72016L
      ), var1 = c(509L, 301L, NA), var2 = c(1678L, NA, 45L)), .Names = c("ID", 
      "date", "var1", "var2"), class = "data.frame", row.names = c(NA, 
      -3L))
      

      然后:

      Mar_df_summarised <- Mar_df %>% 
          arrange(ID,date) %>%
          fill(...=var1,.direction="down") %>% 
          group_by(ID) %>% 
          summarise_all(.funs=funs(last(.))) 
      

      结果是:

      # A tibble: 2 x 4
        ID        date  var1  var2
        <fctr>   <int> <int> <int>
      1 person1  72016   509    45
      2 person2 122016   301    NA
      

      【讨论】:

        猜你喜欢
        • 2020-11-03
        • 2020-11-01
        • 2020-06-23
        • 2021-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-16
        • 1970-01-01
        相关资源
        最近更新 更多