我正在试图找出巩固数据框架的最佳方法,而我似乎遇到了障碍。如何将这两行合并,以便迈克尔的试用和购买日期位于同一行?
**user** | **trial_date** | **purchase_date**
Michael | 01-02-2016 | NA
Michael | NA | 02-15-2016
答案 0 :(得分:2)
您可以使用spread
中的gather
和tidyr
函数来删除NAs,首先将两列收集到一列中,然后在组合数据中过滤NA列,然后将它们传播回去。
df %>%
group_by(user) %>%
gather("type", "date", trial_date, purchase_date) %>%
filter(!is.na(date)) %>%
spread(type, date)
# user purchase_date trial_date
# * <fctr> <chr> <chr>
# 1 Michael 02-15-2016 02-15-2016
答案 1 :(得分:0)
在user
对数据框进行分组后,您可以从每列中获取第一个非NA值,如果所有元素都是NA,.[!is.na(.)]
将返回NULL,并使用[1]
强制转换为NA索引:
df %>% group_by(user) %>% summarise_all(funs(.[!is.na(.)][1]))
# A tibble: 1 × 3
# user trial_date purchase_date
# <fctr> <fctr> <fctr>
#1 Michael 01-02-2016 02-15-2016