Как использовать значение столбца в качестве имени столбца? - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть фрейм данных с некоторыми столбцами с данными плюс столбец с именами столбцов:

mydf <- data.frame(
  "aa" = 11:15,
  "ab" = 21:25,
  "ac" = 31:35,
  "nn" = c("aa", "aa", "ac", "ab", "aa"))

Я хотел бы получить вектор из столбцов "aa", "ab" или "ac".Это имя столбца для каждой строки указано в столбце «nn».

Так что я должен получить 11, 12, 33, 24, 15.

Можно ли это сделать без циклов?mydf[mydf$nn] не работает.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Мы можем использовать match для возврата индекса имен столбцов, а затем создать индекс строки / столбца для извлечения значений

mydf[-4][cbind(seq_len(nrow(mydf)), match(mydf$nn, names(mydf)))]
#[1] 11 12 33 24 15
0 голосов
/ 04 февраля 2019

Мы могли бы использовать cbind и создать индекс столбца строки, а затем использовать его для подмножества кадра данных.

mydf[cbind(1:nrow(mydf), mydf$nn)]
#[1] "11" "12" "33" "24" "15"

Или, если вы знаете, что они всегда будут числом

as.numeric(mydf[cbind(1:nrow(mydf), mydf$nn)])
#[1] 11 12 33 24 15

где

cbind(1:nrow(mydf), mydf$nn) #gives

#     [,1] [,2]
#[1,]    1    1
#[2,]    2    1
#[3,]    3    3
#[4,]    4    2
#[5,]    5    1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...