R:在第一列中按重复项合并行

R:在第一列中按重复项合并行,r,merge,duplicates,dplyr,R,Merge,Duplicates,Dplyr,我有一个大数据集,在第一列中有重复的值,如下所示: ID date var1 var2 person1 052016 509 1678 person2 122016 301 NA person1 072016 NA 45 我想合并ID,按“日期”取最近的值,如果是NA,则取最后一个不是NA的值。 输出应如下所示: ID date var1 var2 person2 1

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

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(.)]))
我应该使用什么将工作代码应用于整个数据集?

使用的解决方案

库(dplyr)
dat2%
安排(ID,描述(日期))%>%
分组依据(ID)%>%
总结所有(funs(first(.[!is.na(.))))%>%
解组()
dat2
##A tibble:2 x 4
#ID日期var1 var2
#         
#1人1 72016 509 45
#2人2 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)

dat使用
tidyverse
fill
功能。 加载数据:

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%
填充(…=var1,.direction=“down”)%>%
分组依据(ID)%>%
总结所有内容(.funs=funs(最后一个())
结果是:

# A tibble: 2 x 4
  ID        date  var1  var2
  <fctr>   <int> <int> <int>
1 person1  72016   509    45
2 person2 122016   301    NA
#一个tible:2 x 4
ID日期var1 var2
1人1 72016 509 45
2人2 122016 301 NA
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