Распечатать последнюю строку из списка фреймов данных

У меня есть список фреймов данных, из которых мне нужно получить последнюю строку 2-го столбца. Все фреймы данных имеют разное количество строк. Я уже написал код с использованием lapply, который может извлекать любую строку по переменной "num" (возвращая NA для чисел, которые превышают длину строки фреймов данных), однако я хочу включить переменную num = "худший", которая вернет последняя строка, 2-й столбец доступных данных. Это код для извлечения «n-й» строки (xyz - это список фреймов данных):

if(num=="best"){num=as.integer(1)} else
(num=as.integer())

rownumber<-lapply(xyz, "[", num, 2, drop=FALSE)

Целый день ломал голову, пытаясь найти решение, чтобы объявить num == "худшим". Я хочу избежать петель, поэтому я использую lapply, но, может быть, другого пути нет?


person clattenburg cake    schedule 17.10.2013    source источник
comment
Используйте функцию tail с lapply. tail имеет n аргумент.   -  person A5C1D2H2I1M1N2O1R2T1    schedule 17.10.2013


Ответы (2)


Насколько я понимаю, вам нужна функция, которая возвращает второй столбец data.frame из list фреймов данных с необязательным аргументом worst, который позволяет ограничить его последним наблюдением.

Я думаю, что самый простой способ сделать это - написать вспомогательную функцию, а затем применить ее к вашему списку с помощью lapply.

Я написал функцию selector, которая принимает аргумент строки и столбца, а также аргумент worst. Я думаю, это все, что вам нужно.

df1 <- data.frame(A = rnorm(10), B = rnorm(10), C = rnorm(10))
df2 <- data.frame(A = rnorm(10), B = rnorm(10), C = rnorm(10))
ldf <- list(df1, df2)

selector <- function(DF, col, row=NULL, worst=FALSE){
    if(!is.null(row)) return(DF[row, col])
    if(!missing("col")) if(col > ncol(DF)) return(NA)
    if(!is.null(row)) if(row > nrow(DF)) return(NA)
    if(worst) {
        tail(DF[,col, drop=F],1)
    } else {
        DF[row, col, drop=FALSE]
    }
}

lapply(ldf, selector, worst=T)
person ricardo    schedule 17.10.2013

Как насчет...

lapply(xyz, tail, 1)
person Jilber Urbina    schedule 17.10.2013
comment
@Jiber, я не думаю, что это отвечает на фактический вопрос - OP хотел помочь написать функцию, которая выбирает комбинации строк и столбцов с аргументом worst, который возвращает последнюю строку. - person ricardo; 18.10.2013