【问题标题】:Reverse of summarise() function in dplyr [duplicate]dplyr中summarise()函数的反转[重复]
【发布时间】:2016-03-24 11:52:40
【问题描述】:

让我们考虑以下数据

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

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

【问题讨论】:

  • 请考虑重命名此问题。您正在“反转” dplyr::summarise 函数,仅用于 summarise 的一个非常具体的应用程序(即 summarise(n()))。答案不适用于 summarise 函数的其他用途,可能会使可能访问此页面的人感到困惑/失望

标签: r aggregate dplyr


【解决方案1】:

我们可以使用base R 来做到这一点

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

这是我会选择base R 的情况之一。话虽如此,对于此类问题有一些打包解决方案,即来自splitstackshapeexpandRows(上述包装器)

library(splitstackshape)
data %>%
     group_by(V1, V2) %>%
     summarise(n=n())  %>%
     expandRows(., "n")

或者,如果我们想在base R 中坚持使用与%&gt;% 中类似的选项

 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

数据

data1 <- group_by(data, V1, V2) %>% summarise(n())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多