0ときに最初の観察を交換:私はこのサンプルを有するレベル因子R
data <- structure(list(mmsi = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
2L, 2L, 2L, 2L, 2L), .Label = c("a", "b"), class = "factor"),
tr = c(1, 1, 1, 0, 2, 2, 0, 4, 4, 0, 5, 5)), .Names = c("mmsi",
"tr"), row.names = c(NA, -12L), class = "data.frame")
Iは各mmsi
ため、tr
の前回値とカラムtr
内の各0を置き換えます。
この関数は、サンプルに適しています:
for (i in levels(data$mmsi)) {
data$test <- na.locf(with(data, { is.na(tr) <- tr == 0; tr }), fromLast = FALSE)}
しかし、私は大きなサンプルを再生するとき、1つの問題はapears:最初の値が0であれば、その後、私は(エラーを持っている、それは見つけることができないので、前の値...)。例えば
私は
data <- structure(list(mmsi = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
2L, 2L, 2L, 2L, 2L), .Label = c("a", "b"), class = "factor"),
tr = c(0, 1, 1, 0, 2, 2, 0, 4, 4, 0, 5, 5)), .Names = c("mmsi",
"tr"), row.names = c(NA, -12L), class = "data.frame")
で、少量のサンプルを編集した場合、列tr
は前のサンプルでは0ではなく1でここから始まります。私はその後、同じ機能for (i in levels(data$mmsi)) { data$test <- na.locf(with(data, { is.na(tr) <- tr == 0; tr }), fromLast = FALSE)}
を適用した場合、私はもちろん、エラーが発生している
Error in `$<-.data.frame`(`*tmp*`, "test", value = c(1, 1, 1, 2, 2, 2, :
replacement has 11 rows, data has 12
- >
私は私が必要と思います(コラムtr
に最初の値)の値Iの変化を置き換えることができなかった機能私の関数では、最初に0を編集する行がtr
の最初のレベルとして発生します。新しい行は、0を次の非ゼロ値に置き換える必要があります。その後、残りの機能は正常です。
私はこの新しいコラムを探しています出力は、次のとおりです。
data$test
[1] 1 1 1 1 2 2 2 4 4 4 5 5
任意のアイデアはどのようにこれを取得するには?
グレートを使用せずにこれを行うことができ、それは非常にうまく動作しているようだ(と 'tr'は数値です;))。私は同じ手順を 'for(i in levels(data $ mmsi)){ data $ test = data $ rl [!! data $ rl] [cumsum(!! data $ rl)+1] というデータで取得しようとしました。 fromLast = TRUE(データ、{is.na(テスト)< - テスト== 0;テスト})、$テスト[is.na(データ$テスト)] < - 0 データ$テスト< - na.locf ) 'それはあなたの答えの前にそれを得ていませんでした。ありがとう! – Floni