7 列のデータ フレームがあり、一部の行には 7 つの値があり、他の行には特定のポイントを過ぎた NA があるとします。NA ではない最後の値 (左から右に移動) を取得し、次に値を直接左に取得したいと考えています。これは階層的なデータですが、一部のグループは他のグループよりも深くなります。新しいデータ フレームの 2 つの列に、最も深いグループと 2 番目に深いグループが必要です。
このコードは機能しますが、46K 観測のデータ フレームのメモリを使い果たします。私が考えていないより効率的な方法はありますか?
df <- data.frame(LEVEL1 = c('animal', 'vegetable', 'mineral'),
LEVEL2 = c('mammal', 'pepper', 'rock'),
LEVEL3 = c('dog', 'jalepeno', NA),
LEVEL4 = c('westie', NA, NA))
deepest <- apply(df, 1,
function(x) length(which(!is.na(x))))
one.up <- apply(df, 1,
function(x) length(which(!is.na(x)))-1)
len <- nrow(df)
output <- data.frame(one.up = unlist(sapply(1:len,
function(x) df[x, one.up[x]])),
deepest= unlist(sapply(1:len,
function(x) df[x, deepest[x]])))
初投稿です。通常、このサイトから必要なものをまとめることができます。前もって感謝します。