データフレーム内のグループ内の列にリード/ラグを適用しようとしています。私はリード値を供給する別のデータフレームを持っています。リード値は、被験者、ノードおよびセンサ間で一致させる必要があります。dplyr各グループにリード/ラグを適用してください
例データ:
dput(test_df)
structure(list(subj = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L), class = "factor", .Label = c("c1", "c2")), node = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Node 1", "Node 2"), class = "factor"),
sensor = c(2600, 2600, 2600, 2600, 2600, 2610, 2610, 2610,
2610, 2610, 2620, 2620, 2620, 2620, 2620, 2630, 2630, 2630,
2630, 2630, 2600, 2600, 2600, 2600, 2600, 2610, 2610, 2610,
2610, 2610, 2620, 2620, 2620, 2620, 2620, 2630, 2630, 2630,
2630, 2630), env_vals = c(5.33510151261835, 5.37708998203619,
5.18984848232565, 6.82992070825272, 5.92982096601743, 7.05707692156306,
7.67415658214675, 7.34534719192697, 6.5280531083936, 4.42063211468128,
4.98606873099945, 6.71683566611408, 7.04201828330796, 3.22384043747125,
7.16178630140025, 3.97134044753568, 3.06904118833596, 6.10839825474766,
2.51080443592448, 1.62815576579611, 4.5366549039861, 4.05204500710188,
8.50974398925943, 0.454711437225098, 7.63457277730028, 7.73074760170432,
1.7535421576035, 1.255666521349, 2.67319773682482, 1.61263970508914,
6.84515776718986, 4.319997054675, 5.64959416239443, 1.52348658940225,
4.05659367113441, 5.19205390068456, 2.41995034428535, 4.81929265375379,
4.65957617474215, 3.85295676615691)), .Names = c("subj",
"node", "sensor", "env_vals"), row.names = c(NA, -40L), class = "data.frame")
dput(cc_df)
structure(list(subj = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("c1", "c2"), class = "factor"),
node = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L), .Label = c("Node 1", "Node 2"), class = "factor"),
sensor = c(2600, 2610, 2620, 2630, 2600, 2610, 2620, 2630,
2600, 2610, 2620, 2630, 2600, 2610, 2620, 2630), lg_val = c(1,
1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4)), .Names = c("subj",
"node", "sensor", "lg_val"), row.names = c(NA, -16L), class = "data.frame")
が被写体上にループ、ノード、cc_dfのセンサの組み合わせと、関連するリード/ラグ値を適用するためにこれらを使用。私は(列マッチングに関してだけでなく、いくつかの無関係な列)/バックラグリードを得る上で、私はt2
一部のコメントを解除した場合
for(i in 1:nrow(cc_df)){
sbj <- as.character(cc_df[i,1])
nd <- as.character(cc_df[i,2])
sens <- cc_df[i,3]
lg_val <- as.numeric(cc_df[i,4])
# print(str(data.frame(sbj,nd,sens,lg_val)))
# t2 <- filter(test_df, subj==sbj, node==nd, sensor==sens) %>% transmute_(lagged_env_sensor=lead(env_vals,lg_val))
test_df <- group_by(test_df, subj==sbj, node==nd, sensor==sens) %>% mutate(lagged_env_sensor=lead(env_vals,lg_val))
}
これは私Error in eval(expr, envir, enclos) : cannot modify grouping variable
を与えます。
私の質問は、正しいリード/ラグ値をtest_dfの正しいグループにどのように適用できますか?
ありがとうございました。あなたがjoin操作を実行したいよう
イアン
期待される出力は何ですか?これは単なるマージではありませんか? – Sotos