2016-09-14 1 views
1

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

library(data.table) 

set.seed(pi) 
DT <- data.table(
    X1 = LETTERS[1:10], 
    X2 = letters[1:10], 
    Z = sample(c("X1", "X2"), 10, replace = TRUE) 
) 

DT[] 

Этот код генерирует следующий

X1 X2 Z 
1: A a X1 
2: B b X2 
3: C c X1 
4: D d X1 
5: E e X2 
6: F f X2 
7: G g X1 
8: H h X1 
9: I i X2 
10: J j X2 

Теперь я хочу, чтобы иметь столбец W где, если столбец Z является «X1» (или «X2») содержание на колонке X1 (или X2) является Сел КТИД.

Одним из решений может быть:

DT[Z == "X1", W := X1] 
DT[Z == "X2", W := X2] 

Но я хотел бы найти более изящный способ сделать это, потому что у меня есть много столбцов, где мне нужно выбрать одну запись.

Благодаря

ответ

2

Мы можем использовать get после цикла по последовательности строк

DT[, W := get(Z) , 1:nrow(DT)] 

Или с eval(as.name

DT[, W := eval(as.name(Z)) , 1:nrow(DT)] 
+1

Спасибо, теперь ответ выглядеть легким, но я застрял в выражениях типа : 'DT [, W: = diag (as.matrix (DT [, DT [, Z], с = FALSE]))]' –

+1

@ EnriquePérezHerrero Создание матрицы и принятие 'diag' должно быть неэффективным – akrun

+0

Да, вы теряете преимущества использования 'data.table' –

Смежные вопросы