2012-11-29 138 views
0

數據幀:data.frame緊湊版本

200.01 117:10520 227137.56097561 
200.01 155:24 227137.56097561 
200.01 265:47 227137.56097561 
200.01 266:37 227137.56097561 
200.01 281:568 227137.56097561 
200.01 282:246 227137.56097561 
200.31 190:3374 227360 
200.56 110:1261 227545.365853659 
200.56 186:571 227545.365853659 
200.66 114:969 227619.512195122 
200.66 118:3886 227619.512195122 

的數據是所呈現的一個。問題:我想從複製的列中創建一行。例如:

200.01 117:10520 155:24 265:47 266:37 281:568 282:246 227137.56097561 
+0

你想讓它們全部出現在一列嗎?或在許多列?這聽起來像你可能會想要一個列表,其中每個元素可以是任何長度 – Justin

+0

我希望它在例子中。所以基本上這個例子會是1行,在算法之後它會像4行:200.01 200.31 200.56 200.66。我會創建一個新框架 – alap

+1

我認爲@賈斯汀的問題是「應該117:10520 ... 282:246」是一列或六列。如果需要單個列,這對我來說就像是一個非常簡單的'aggregate()'應用程序。 – A5C1D2H2I1M1N2O1R2T1

回答

2

正如評論所說,這是一個非常簡單的aggregate問題:

您的數據:

的聚集
dat <- read.table(header = FALSE, stringsAsFactors=FALSE, text = " 
        200.01 117:10520 227137.56097561 
        200.01 155:24 227137.56097561 
        200.01 265:47 227137.56097561 
        200.01 266:37 227137.56097561 
        200.01 281:568 227137.56097561 
        200.01 282:246 227137.56097561 
        200.31 190:3374 227360 
        200.56 110:1261 227545.365853659 
        200.56 186:571 227545.365853659 
        200.66 114:969 227619.512195122 
        200.66 118:3886 227619.512195122") 

兩個選項。在第一個中,V2list。在第二個選項中,V2是一個字符串。

aggregate(V2 ~ V1 + V3, dat, c) 
#  V1  V3             V2 
# 1 200.01 227137.6 117:10520, 155:24, 265:47, 266:37, 281:568, 282:246 
# 2 200.31 227360.0           190:3374 
# 3 200.56 227545.4         110:1261, 186:571 
# 4 200.66 227619.5         114:969, 118:3886 
aggregate(V2 ~ V1 + V3, dat, paste, collapse=" ") 
#  V1  V3            V2 
# 1 200.01 227137.6 117:10520 155:24 265:47 266:37 281:568 282:246 
# 2 200.31 227360.0          190:3374 
# 3 200.56 227545.4        110:1261 186:571 
# 4 200.66 227619.5        114:969 118:3886 

參見:R Grouping functions: sapply vs. lapply vs. apply. vs. tapply vs. by vs. aggregate


如果需要多列,你可能仍然希望聚合,然後分裂列好以後使用自定義功能。一個示例功能是@RicardoSaporta共享的tableFlatten,這將創建與最長列表項目一樣多的列。但是,正如@Justin在評論中提到的,根據你想要做什麼,列表可能更有用。

dat2 <- aggregate(V2 ~ V1 + V3, dat, c) 
(dat2 <- tableFlatten(dat2)) 
#  V1  V3  V2.01 V2.02 V2.03 V2.04 V2.05 V2.06 
# 1 200.01 227137.6 117:10520 155:24 265:47 266:37 281:568 282:246 
# 2 200.31 227360.0 190:3374          
# 3 200.56 227545.4 110:1261 186:571        
# 4 200.66 227619.5 114:969 118:3886