私はさまざまなreshape
質問をしてきましたが、この繰り返しが以前に尋ねられたとは思いません。81K 行と 4188 変数のデータ フレームを扱っています。変数 161:4188 は、さまざまな変数として存在する測定値です。はidvar
列 1 にあります。列 1:160 を繰り返し、列 169:4188 の新しいレコードを作成します。最終的なデータ フレームは、162 列と 326,268,000 行 (一意のレコードとして変換された 81K * 4028 変数) のディメンションになります。
これが私が試したものです:
reshapeddf <- reshape(c, idvar = "PID", varying = c(dput(names(c[161:4188]))),
v.names = "viewership",
timevar = "network.show",
times = c(dput(names(c[161:4188]))),
direction = "long")
操作は完了しませんでした。10分近く待ちました。これは正しい方法ですか?Windows 7、8 GB RAM、i5 3.20 GHz PC を使用しています。Rでこの転置を完了する最も効率的な方法は何ですか? BondedDust と Nick による回答はどちらも賢いですが、メモリの問題が発生します。このスレッドの 3 つのアプローチのいずれかreshape
、tidyr
またはdo.call
を使用して実装する方法はありff
ますか?
以下のデータ例では、列 1:4 が繰り返したい列で、列 5:9 が新しいレコードを作成する列です。
structure(list(PID = c(1003401L, 1004801L, 1007601L, 1008601L,
1008602L, 1011901L), HHID = c(10034L, 10048L, 10076L, 10086L,
10086L, 10119L), HH.START.DATE = structure(c(1378440000, 1362974400,
1399521600, 1352869200, 1352869200, 1404964800), class = c("POSIXct",
"POSIXt"), tzone = ""), VISITOR.CODE = structure(c(1L, 1L, 1L,
1L, 1L, 1L), .Label = c("0", "L"), class = "factor"), WEIGHTED.MINUTES.VIEWED..ABC...20.20.FRI = c(0,
0, 305892, 0, 101453, 0), WEIGHTED.MINUTES.VIEWED..ABC...BLACK.ISH = c(0,
0, 0, 0, 127281, 0), WEIGHTED.MINUTES.VIEWED..ABC...CASTLE = c(0,
27805, 0, 0, 0, 0), WEIGHTED.MINUTES.VIEWED..ABC...CMA.AWARDS = c(0,
679148, 0, 0, 278460, 498972), WEIGHTED.MINUTES.VIEWED..ABC...COUNTDOWN.TO.CMA.AWARDS = c(0,
316448, 0, 0, 0, 0)), .Names = c("PID", "HHID", "HH.START.DATE",
"VISITOR.CODE", "WEIGHTED.MINUTES.VIEWED..ABC...20.20.FRI", "WEIGHTED.MINUTES.VIEWED..ABC...BLACK.ISH",
"WEIGHTED.MINUTES.VIEWED..ABC...CASTLE", "WEIGHTED.MINUTES.VIEWED..ABC...CMA.AWARDS",
"WEIGHTED.MINUTES.VIEWED..ABC...COUNTDOWN.TO.CMA.AWARDS"), row.names = c(NA,
6L), class = "data.frame")