假設我有一個7列的數據框,其中一些行有7個值,其他行有NAs通過某個點。我想抓住最後一個值(從左到右),它不是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]])))
第一次發佈。通常我可以湊齊從我的網站需要的東西。提前致謝。
這樣做。謝謝。 –