在R

时间:2019-07-19 20:08:52

标签: r dplyr plyr data-manipulation

我有一个正在查看的数据集... 3列分别为namestoreamount ....

name        store     amount
John Doe    Target    150

现在的诀窍是,这个John Doe可能再次在文件中但有此数据

name        store     amount
John Doe    Walmart   50

我想为John Doe的所有活动总结并添加 ADD 新列,如下所示:

name        store A   amount A   store B   amount B
John Doe    Target    150        Walmart   50  
  • 我尝试过transposeddlyr,但没有任何运气。
  • 我尝试过转置和分组,但似乎无法按多列分组

感谢您的帮助...

1 个答案:

答案 0 :(得分:0)

我有一个适用于您给出的特定示例的解决方案,但是我觉得它不是特别优雅,如果每个名称出现两次以上(在这种情况下,必须为mutate动词提供更多选择。

df <- tibble(name = c("John Doe"),
             store = c("Target", "Walmart"),
             amount = c(150, 50))

coalesce_by_column <- function(df) {
    return(dplyr::coalesce(!!! as.list(df)))
}

df2 <- df %>% 
    group_by(name) %>% 
    mutate(store_k = c("store A", "store B"),
           amount_k = c("amount A", "amount B")) %>% 
    spread(store_k, store) %>%
    spread(amount_k, amount) %>%
    summarise_all(coalesce_by_column)

coalesce_by_column函数组合了包含NA的不相交的行(有关更多详细信息,请检查here)。如果要重新排列列顺序,可以使用select轻松地完成。