Как использовать имена столбцов переменных в RHS: = операций? Например, учитывая эту data.table «dt», я хотел бы создать два новых столбца: «first_y» и «first_z», которые содержат первое наблюдение за данным столбцом для значений «x».R - Data.table - Использование имен переменных столбцов в операциях RHS
dt <- data.table(x = c("one","one","two","two","three"),
y = c("a", "b", "c", "d", "e"),
z = c(1, 2, 3, 4, 5))
dt
x y z
1: one a 1
2: one b 2
3: two c 3
4: two d 4
5: three e 5
Вот как вы могли бы это сделать без имен переменных столбцов.
dt[, c("first_y", "first_z") := .(first(y), first(z)), by = x]
dt
x y z first_y first_z
1: one a 1 a 1
2: one b 2 a 1
3: two c 3 c 3
4: two d 4 c 3
5: three e 5 e 5
Но как бы это сделать, если имена столбцов «y» и «z» динамически сохраняются в переменной?
cols <- c("y", "z")
# This doesn't work
dt[, (paste0("first_", cols)) := .(first(cols)), by = x]
# Nor does this
q <- quote(first(as.name(cols[1])))
p <- quote(first(as.name(cols[2])))
dt[, (paste0("first_", cols)) := .(eval(q), eval(p)), by = x]
Я пробовал множество других комбинаций quote() и eval() и as.name() без успеха. LHS операции работает по назначению и документируется во многих местах, но я не могу найти ничего об использовании имени переменной столбца в RHS. Заранее спасибо.
Это может быть но в соответствии с этим faq: https://cran.r-project.org/web/packages/data.table/vignettes/datatable-faq.pdf, это не рекомендуется: dt [, (paste0 ("first_", cols)): = first (.SD [[cols]]), by = x] – user2507320
Как интересно, этот sort've работает: 'dt [, (paste0 («first_», cols)): = lapply (lapply (lapply (cols, as.name), eval), сначала), by = x] 'но оценивается в контексте верхнего уровня env – Shape
Я получаю' Ошибка: object 'first' not found', можете ли вы обновить свой вопрос, чтобы сделать его воспроизводимым? – jangorecki