假设我有一个 7 列的数据框,其中一些行有 7 个值,而另一些行的 NA 超过了某个点。我想获取不是 NA 的最后一个值(从左到右),然后直接获取左侧的值。它是分层数据,但有些组比其他组更深入。我想要新数据框中两列中最深和第二深的组。
这段代码有效,但会最大限度地利用我对 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]])))
第一次发帖。通常我可以从这个站点拼凑出我需要的东西。提前致谢。