コメントで述べたように、これは非常に簡単な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")
集約のための2つのオプション。最初のものでV2
は、list
です。2番目のオプションで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グループ化関数:sapply vs. lapplyvs.apply。vs.タップライvs.バイvs.アグリゲート
複数の列が必要な場合でも、カスタム関数を使用して列を集計してから分割することをお勧めします。1つのサンプル関数は、 @ RichardSaportatableFlatten
によって共有されます。これにより、最長のリストアイテムと同じ数の列が作成されます。ただし、@ 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