Извините за очень простой вопрос, решение должно быть очень простым, но я не могу его найти.Использование gsub добавления нового столбца в data.table
Попытки использовать GSUB добавить новый столбец в data.table, я получил предупреждение «аргумента„замена“имеет длину> 1 и только первый элемент будет использоваться», и все data.table строки имеют в новом столбце значение первой строки.
Вот упрощенный случай:
dt <- data.table(v1=c(1,2,3) , v2=c("axb","cxxd","exfxgx"))
dt[ , v3:=gsub("x",v1,v2)]
Новый столбец v3 содержит строку с «1» вместо «х» во всех строках.
Использование других функций, например.
dt[ , v3:=paste(v1,v2)]
работает должным образом.
Я использую Rstudio v.0.98.1103, R v.3.1.2, data.table v.1.9.4
'gsub' не имеет векторизации в замене, так что предупреждение вам сообщает. – A5C1D2H2I1M1N2O1R2T1
Другим вариантом будет 'myFunc <- function (x, y) gsub (" x ", x, y); dt [, v3: = mapply (myFunc, v1, v2)] '. Кроме того, re my edit, когда вы используете оператор ': =', обновляет данные, поэтому нет необходимости переназначать его снова, используя 'dt <- dt'. Посмотрите [здесь] (https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-reference-semantics.html) для получения дополнительной информации. –
@DavidArenburg: спасибо за ваш комментарий, я привык переназначать таблицу данных, даже если обновление на месте, потому что во время выполнения я нахожу очень раздражающим, чтобы видеть на консоли все главы/хвосты обновленных таблиц данных (это более сложно заметить ошибки/предупреждения). Может быть, есть более умные способы избежать этого ... – mbranco