2012-06-06 5 views
2

У меня есть data.frame с произвольным количеством столбцов, и мне нужен способ захватить разные столбцы (только одну) из каждой строки. Например, если у меня есть data.frame вроде этого:Получите разную колонку для каждой строки data.frame

myDF <- data.frame(A=letters[1:5], B=letters[6:10], C=LETTERS[26:22], stringsAsFactors=FALSE) 

Я хочу, чтобы захватить буквы а, д, с, W и V.

Если бы это было matrix было бы легко решить.

myDF[cbind(c(1, 2, 3, 4, 5), c(1, 2, 1, 3, 3))] 

Но я должен хранить данные в data.frame, поскольку данные часто POSIXlt, и я не нашел способ, чтобы преобразовать data.frame тех, к matrix.

У кого-нибудь есть хороший способ сделать это, не зацикливая подряд? У меня много неудачных попыток, с которыми я был бы рад поделиться.

+2

Какую версию R вы используете? Ваш код работает отлично, так как по крайней мере R-2.14.2. Кроме того, в ближайшее время (и уже в R-devel, согласно его файлу NEWS), «Матричная индексация данных с помощью двух столбчатых числовых индексов теперь поддерживается как для замены, так и для извлечения». –

+0

R 2.15.0. Вы правы, код работает так же, как для примера, но не тогда, когда данные «POSIXlt». Возможно, мне следует изменить вопрос, чтобы данные были 'POSIXlt'. – Jared

+1

POSIXlt должен быть преобразован в POSIXct перед выполнением НИЧЕГО. –

ответ

1

Это ineloquent, но это работает для дат, которые особенно трудно:

vect <- do.call(c, args=as.list(myDF)) 
vect[(1:NROW(myDF)) + NROW(myDF) * (c(1, 2, 1, 3, 3) - 1)] 
Смежные вопросы