让我们考虑以下数据
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
现在我们要将此数据转换回原始数据。这个程序有什么功能吗?
答案 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