извлечение n-го столбца каждой строки DT в R, где n - вектор количества строк в DT - PullRequest
0 голосов
/ 01 мая 2018

Кажется глупым, но простое извлечение из DT вызывает у меня проблемы. Рассмотрим игрушечный пример: Создайте тестовую таблицу данных с 5 столбцами:

library(data.table)
dt <- fread("  
            V1 V2 V3 V4 V5
            1 10  7  4  3
            2 11  8  5  2
            3 12  9  6  1
            4  1 10  7  4
            5  2 11  8  4
            6  3 12  9  3
            7  4  1 10  3
            8  5  2 11  1
            9  6  3 12  2")

Теперь я хочу добавить 6-й столбец V6, который содержит значение столбца с номером столбца в V5 для каждой строки. Таким образом, final output, который мне нужен, это data.table, который преобразует dt в ниже:

   V1 V2 V3 V4 V5 V6
1:  1 10  7  4  3  7
2:  2 11  8  5  2 11
3:  3 12  9  6  1  3
4:  4  1 10  7  4  7
5:  5  2 11  8  4  8
6:  6  3 12  9  3 12
7:  7  4  1 10  3  1
8:  8  5  2 11  1  8
9:  9  6  3 12  2  6

1 Ответ

0 голосов
/ 01 мая 2018

С помощью data.table мы можем циклически проходить по строкам, подставлять подмножество .SD на основе индекса столбца в 'V5' и назначать (:= его для создания 'V6'

dt2[, V6 := .SD[[V5]], by = 1:nrow(dt2)]
dt2
#   V1 V2 V3 V4 V5 V6
#1:  1 10  7  4  3  7
#2:  2 11  8  5  2 11
#3:  3 12  9  6  1  3
#4:  4  1 10  7  4  7
#5:  5  2 11  8  4  8
#6:  6  3 12  9  3 12
#7:  7  4  1 10  3  1
#8:  8  5  2 11  1  8
#9:  9  6  3 12  2  6

В base R мы используем row/column индексирование

setDF(dt2)
dt2$V6 <- dt2[cbind(seq_len(nrow(dt2)), dt2$V5)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...