在R中将稀疏数据折叠成单行的最佳方法是什么?

时间:2017-04-04 09:47:50

标签: r dplyr

我有一些交易数据,我想在R中转换。

df <- data.frame(
  customer_id = c(123, 123, 123),
  time = c(1, 2, 3),
  rec_type = c('contact', 'appointment', 'sale'),
  variable_1 = c('Yes', NA, NA),
  variable_2 = c(NA, 'No', NA),
  variable_3 = c(NA, NA, 'complete'))

数据如下所示:

customer_id     time    rec_type     variable_1     variable_2  variable_3
123             1        contact      Yes            NA          NA
123             2        appointment  NA             No          NA
123             3        sale         NA             NA          complete

基本上,我试图通过删除特定于时间和特定于记录的信息来总结个人数据,然后将个人的唯一数据折叠成单行以获取唯一信息,这样看起来像: / p>

customer_id   variable_1    variable_2    variable_3
123           Yes           No            complete

在R中执行此操作的最佳方式是什么?

2 个答案:

答案 0 :(得分:2)

使用data.table轻松

library(data.table)

setDT(mydata)[,.(na.omit(variable_1),na.omit(variable_2),na.omit(variable_3)), by=.(customer_id)]

答案 1 :(得分:2)

根据您的示例,您可以尝试:

df %>% 
  group_by(customer_id) %>%
  select( -time, -rec_type) %>%
  summarise_each(funs(na.omit(.)) )

P.S。当summarise_all()被弃用

时,summarise_each()可能是未来更好的选择