Как вы относитесь к переменным в data.table, если имена переменных хранятся в символьном векторе? Например, это работает для data.frame:
df <- data.frame(col1 = 1:3)
colname <- "col1"
df[colname] <- 4:6
df
# col1
# 1 4
# 2 5
# 3 6
Как я могу выполнить эту же операцию для таблицы данных, либо с нотной записью :=, либо без нее? Очевидная вещь dt[ , list(colname)] не работает (и я этого не ожидал).
* Это не ответ на самом деле, но у меня нет достаточного количества уличных отзывов для комментариев: /
В любом случае, для тех, кто может попытаться создать новый столбец в таблице данных с именем, хранящимся в переменной, у меня есть следующее, чтобы работать. Я понятия не имею, что это за производительность. Любые предложения по улучшению? Можно ли предположить, что безымянный новый столбец всегда будет иметь имя V1?
colname <- as.name("users")
# Google Analytics query is run with chosen metric and resulting data is assigned to DT
DT2 <- DT[, sum(eval(colname, .SD)), by = country]
setnames(DT2, "V1", as.character(colname))
Обратите внимание, что я могу ссылаться на него просто отлично в sum (), но, похоже, не может его назначить в тот же шаг. BTW, причина, по которой мне нужно это сделать, это colname будет основываться на вводе пользователя в приложении Shiny.
Для нескольких столбцов и функции, применяемой к значениям столбца.
При обновлении значений из функции RHS должен быть объектом списка, поэтому использование цикла .SD с lapply сделает трюк.
Пример ниже преобразует целочисленные столбцы в числовые столбцы
a1 <- data.table(a=1:5, b=6:10, c1=letters[1:5])
sapply(a1, class) # show classes of columns
# a b c1
# "integer" "integer" "character"
# column name character vector
nm <- c("a", "b")
# Convert columns a and b to numeric type
a1[, j = (nm) := lapply(.SD, as.numeric ), .SDcols = nm ]
sapply(a1, class)
# a b c1
# "numeric" "numeric" "character"