2017-07-18 16 views
2

的列表的數據幀。如果我構建一個數據幀如何來分解由表

# constructing df 
a <- c(rep("A", 3), rep("B", 3), rep("A",2)) 
b <- c(1,1,2,4,1,1,2,2) 
#c <- c("ir", "ir", "br", "ir", "us", "us", "ir", "br") 
c <- c(1, 2, 3, 4, 4, 4, 4, 5) 
df <- data.frame(a,b,c) 

我可以聚合是通過:

df_red <- aggregate(list(track = c), df[,c("a", "b")], '[') 

什麼是解聚,早的最佳方式以前是什麼?

換句話說,我怎麼可以把這樣的:

a b track 
1 A 1 1, 2 
2 B 1 4, 4 
3 A 2 3, 4, 5 
4 B 4  4 

這樣:

a b c 
1 A 1 1 
2 A 1 2 
3 A 2 3 
4 B 4 4 
5 B 1 4 
6 B 1 4 
7 A 2 4 
8 A 2 5 
+1

在基R,你可以做'cbind(df_red [代表(seq_along(df_red $軌道),長度(df_red $軌道)),1:2],軌道=不公開(df_red $軌道))' 。 – lmo

+0

嘗試'library(tidyr); unnest(df_read)' – akrun

回答

3

1)UNNEST嘗試unnest這樣的:

library(tidyr) 

df_red %>% unnest 

unnest(df_red) 

2)基礎這裏是一個基礎的解決方案:

do.call(rbind, do.call(Map, c(data.frame, df_red))) 

3)separate_rows還要注意的是,如果你想聚集成一個字符串,而不是進入一個載體,我們可以有這樣的對:

library(tidyr) 

ag_s <- aggregate(list(track = c), df[c("a", "b")], toString) 

ag_s %>% separate_rows(track)