反转dplyr中的summarize()函数

时间:2016-03-24 11:52:41

标签: r aggregate dplyr

让我们考虑以下数据

data <- data.frame(V1 = c("A","A","A","B","B","C","C"), V2 = c("B","B","B","C","C","D","D"))
> data
  V1 V2
1  A  B
2  A  B
3  A  B
4  B  C
5  B  C
6  C  D
7  C  D

现在我们按两列汇总数据并获取

library(dplyr)
group_by(data, V1, V2) %>% summarise(n())
      V1     V2   n()
  (fctr) (fctr) (int)
1      A      B     3
2      B      C     2
3      C      D     2

现在我们要将此数据转换回原始数据。这个程序有什么功能吗?

1 个答案:

答案 0 :(得分:4)

我们可以使用base R来执行此操作

 data1 <- as.data.frame(data1)
 data1[rep(1:nrow(data1), data1[,3]),-3]

这是我选择base R的情况之一。话虽如此,有针对此类问题的包解决方案,即来自expandRows的{​​{1}}(上述包装)

splitstackshape

或者,如果我们希望坚持library(splitstackshape) data %>% group_by(V1, V2) %>% summarise(n=n()) %>% expandRows(., "n") base R内的类似选项

%>%

数据

 data %>% 
    group_by(V1, V2) %>%
    summarise(n=n()) %>%
    do(data.frame(.[rep(1:nrow(.), .$n),-3]))
#       V1     V2
#     (fctr) (fctr)
#1      A      B
#2      A      B
#3      A      B
#4      B      C
#5      B      C
#6      C      D
#7      C      D