【发布时间】:2012-06-09 00:16:20
【问题描述】:
假设我有一个 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]])))
第一次发帖。通常我可以从这个站点拼凑出我需要的东西。提前致谢。
【问题讨论】: