我有一些交易数据,我想在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中执行此操作的最佳方式是什么?
答案 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()
可能是未来更好的选择